如何修复 psql 报告的版本?

如何修复 psql 报告的版本?

我一直在编写一个 Ansible 脚本,用于定义我们公司服务器的标准模板。由于一些历史原因,尽管我们使用的是 Ubuntu 18.04(附带 PostgreSQL 11),但我们仍选择继续使用 PostgreSQL 9.6。我们打算在几个月的过渡期后赶上最新版本。

我们使用的 AWS 18.04 镜像的 PG 版本是 11。在我们的测试服务器上卸载版本 11 并安装 9.6 后,结果psql --version仍然是:

psql (PostgreSQL) 11.1 (Ubuntu 11.1-3.pgdg18.04+1)

然而,apt-cache policy postgresql-11给了我:

postgresql-11:
  Installed: (none)
  Candidate: 11.1-3.pgdg18.04+1
  Version table:
     11.1-3.pgdg18.04+1 500
        500 http://apt.postgresql.org/pub/repos/apt bionic-pgdg/main amd64 Packages

pg_lsclusters产量:

Ver Cluster Port Status Owner    Data directory               Log file
9.6 main    5432 online postgres /var/lib/postgresql/9.6/main /var/log/postgresql/postgresql-9.6-main.log

我发现所有这些都具有误导性,即使考虑到psql将与在 5432 上监听的服务器对话的事实。我宁愿让事情保持在一致且明确的状态,而不要冒脚本中出现某些兼容性问题的风险。

我的问题是:是否可以修复 psql 报告的版本,以便它可以报告实际存在的版本?

我觉得删除版本 11 留下了一些对我来说似乎不想要的残余,尽管任务指定了清除和自动删除。

[编辑 2019-02-10]

@steeldriver 的评论让我走上了正确的轨道。我的 Ansible 角色是安装postgresql-9.6postgresql-contrib,这没有意义,因为据我所知,如果没有指定9.6作为版本的 ,postgresql-contrib它将代表其当前最新的软件包,即postgresql-contrib-11,而它又具有postgresql-11作为依赖项。

我最终选择了 9.6 和 11 版本,并错误地认为 Amazon 镜像中有 postgresql-11。 我错了。

当我删除postgresql-11(使用自动删除)时,卸载仍然留下了/var/lib/postgresql/11/bin文件夹,其中psql保留了一个二进制文件。启动 PostgreSQL 二进制文件的包装器会枚举版本,/var/lib/postgresql并针对每个版本检查psql二进制文件是否在文件系统上。如果在,则使用最新版本。

通过评论和回答,我现在明白,这肯定是因为要删除的包是 的一种风格,postgresql-client-common而不仅仅是postgresql-11

答案1

评论这里完全准确。你可以利用可惜未得到充分利用的Ubuntu 软件包搜索对于 18.04 版本,报告称 psql 属于 postgresql-客户端通用

psql报告安装的 psql 版本符合预期。

如果您想查看已安装的软件包的版本,dpkg -l packagename这很有用。

相关内容