常见问题解答
apt.postgresql.org 中的常见问题解答
一般问题
Debian/Ubuntu 提供的 PostgreSQL 软件包与 PGDG apt 存储库提供的有什么区别?
其实区别很小。PGDG 软件包是根据 Debian 软件包的相同源代码编译的(Ubuntu 对 PostgreSQL 服务器软件包也使用相同的源代码)。我们尽可能密切地跟踪 Debian unstable 版本,也就是说,这里提供的软件包是相同的,只不过在版本号中添加了 “.pgdg”。我们还使用相同的 postgresql-common 基础设施软件包。
我应使用 Debian/Ubuntu 软件包还是 PGDG 软件包?
Debian 和 Ubuntu 每个发行版只提供一个 PostgreSQL 服务器版本。例如,Debian Squeeze/6.0 中只有一个 PostgreSQL 8.4。如果您希望使用此版本,那就使用。它们没有真正的差别。如果您想使用不同的 PostgreSQL 服务器版本,请使用 PGDG 包。
扩展模块包也是如此,只不过我们的模块会较早更新至新的上游版本(跟随 Debian 不稳定版),而 Debian/Ubuntu 仅接收发布发行版中关键问题的补丁。
Debian 后向移植呢?
[Debian 后向移植] 为已发布的发行版提供较新的包版本,这与 PGDG apt 存储库的作用类似。但后向移植存档的范围严格限制为 testing -> stable 和 stable -> oldstable 后向移植。与在后向移植中可能提供的范围相比,PGDG apt 存储库提供的可用包和 Debian 版本/PostgreSQL 版本组合范围更广。
与前面常见问题解答一样,如果您希望的包在后向移植中可用,那么使用后向移植没有问题。
这些包已准备好用于生产环境了吗?
如上所述,这些包与 Debian/Ubuntu 发行的一模一样。因此,建议将这些包用于生产环境。
技术问题
如何执行 dist-upgrade?
只需更新 sources.list 条目并使用您最喜爱的包工具即可。
为多个发行版编译包时,我们会将不同的后缀附加到包版本号,以确保升级正常。Debian Squeeze 包附加“".pgdg60+1”,Wheezy 包附加“".pgdg70+1”,依此类推;同样,Ubuntu Precise 附加“".pgdg12.4+1”。(Sid 包附加“".pgdg+1”,在 Debian 版本号方案中排在其他所有包后面。)在执行 dist-upgrade 时,这将确保您以前使用的旧发行版的包会被新发行版的包正确替换。
什么是“稳定版”发行版?
我们倾向于只将代号(squeeze、precise 等)用于发行版名称。我们从 Debian 运行不同的存储库,因此我们无法在新 Debian 发行版发布时及时更新稳定版/过时稳定版/测试版符号链接,并且会出现用户看到不一致情况的时间窗口。(此外,即使对于 Debian 发行版,最好在 sources.list 中使用代号,因为这样用户可以决定何时升级。)
我只想从这个存储库获取特定包
在默认情况下,PGDG 存储库的“固定”优先级会与您的 Debian/Ubuntu 存储库相同。这意味着您现有的 PostgreSQL 包将用此存储库中的版本替换,因为它版本号较高。如果您不希望出现这种情况,则需要配置固定(详情请参见 apt_preferences(5))。
创建文件 /etc/apt/preferences.d/pgdg.pref
Package: * Pin: release o=apt.postgresql.org Pin-Priority: 200
存储库的默认优先级为 500,因此 200 会将 PGDG 存储库的优先级降低到足以让您不会从其中自动安装包,但一旦安装了包,它们将继续从 PGDG 存储库升级到较新版本。
您可以使用 apt-cache policy 命令检查您的设置,看看输出中是否出现了“200”
$ apt-cache policy postgresql-9.1 postgresql-9.1: Installed: 9.1.8-1.pgdg70+1 Candidate: 9.1.8-1.pgdg70+1 Version table: *** 9.1.8-1.pgdg70+1 0 200 http://apt.postgresql.org/pub/repos/apt/ wheezy-pgdg/main amd64 Packages 100 /var/lib/dpkg/status 9.1.8-1 0 500 http://ftp.debian.org/debian/ wheezy/main amd64 Packages
我要针对版本 X 的 libpq5,但存储库中只有版本 Y
libpq5 与较旧版本兼容,因此通常很少有理由使用特定版本。(psql 至少需要与其自己的版本对应的版本,大多数其他软件并不真正关心。)出于该原因,我们提供在main 存档组件中从最新稳定 PostgreSQL 服务器版本构建的 libpq5 包。
如果您确实想使用不同的版本,则可以在以 PostgreSQL 主要版本命名的各个档案组件中找到这些包。在 sources.list 中将该版本添加到“main”之后。例如,如果您想要 Debian Squeeze 中的 9.0 的 libpq5,请使用以下方法
deb http://apt.postgresql.org/pub/repos/apt/ squeeze-pgdg main 9.0
请注意,“main”组件中仍然会显示其他 libpq5 包,因此您需要配置固定或设置该包的保留,以防止 apt 尝试升级到较新版本。
我想试用下一个 PostgreSQL 版本的 beta 版本
警告:不同 beta 版本间的数据格式可能会有所不同。请做好准备,在将包升级到较新的 beta 版本或最终版本之前要pg_dump 数据库内容。升级前请查看发行说明。
我们提供了适用于 beta 和 RC 版本的包,但如同前面一个常见问题解答条目所述,您需要将 17 组件添加到您的 /etc/apt/sources.list.d/pgdg.list
条目中,以便版本 17 的包可供安装
deb http://apt.postgresql.org/pub/repos/apt/ bookworm-pgdg main 17
开发快照
警告:开发快照仅用于测试目的,且目录版本会经常更改。不要对您无法承受丢失的任何数据使用它们。
postgresql-17 的开发快照每 6 小时从 git 中构建一次。包在 *-pgdg-snapshot 发行版中发布。您需要添加一个包含 17 组件的 sources.list 条目,例如对于 bullseye
deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] http://apt.postgresql.org/pub/repos/apt/ bookworm-pgdg-snapshot main 17
或者更通用的方式是
sudo add-apt-repository "deb https://apt.postgresql.org/pub/repos/apt/ $(lsb_release -s -c)-pgdg-snapshot main 17"
从 alpha 或 beta 版本更新后会收到有关 CATALOG_VERSION 的错误信息
从 alpha 或 beta 软件包升级后,会收到类似以下内容的错误信息
The database cluster was initialized with CATALOG_VERSION_NO X, but the server was compiled with CATALOG_VERSION_NO Y.
这是由于 PostgreSQL 数据格式在 alpha 版本之间可能会更改,而且有时甚至出于紧急需要在 beta 版本之间更改。
如果你需要访问旧数据,你需要使用之前运行的软件包版本并使用 pg_dump 或 pg_upgrade。必需的二进制文件应已保存到 /var/tmp/postgresql* 中。另外,可以在 /var/cache/apt/archives 中查找旧软件包。
测试发行版是什么?
我们有 squeeze-pgdg-testing、precise-pgdg-testing、sid-pgdg-testing 等发行版,它们会在更新推送到“活动”发行版之前收到所有更新。这些发行版并非适用于正式使用,但欢迎使用它们并帮助调试和测试软件包。请加入邮件列表或 IRC 频道。默认情况下,这些发行版的适用优先级较低,如果你想让这些发行版自动使用,则必须设置固定(例如,优先级为 500)。
快照发行版
尽管 *-pgdg-testing 发行版中的软件包通常是 *-pgdg 正式发行版中要包含的候选版本,但还有一组发行版称为 *-pgdg-snapshot。只要有任何更改,这些软件包就会从 Debian 包装 git 存储库中自动生成。对于某些软件包(最明显的是 PostgreSQL 服务器软件包),会跟踪上游 git 以便即使未发布新版本也可以提供软件包(以及构建日志)。与测试类似,快照默认具有较低的适用优先级。
可以复制存储库吗?
对于某些或所有分布的完整镜像,我们建议使用 debmirror。对于仅复制软件包子集,reprepro 提供从远程存储库“提取”软件包的功能。
软件包的旧版本在哪里?
*-pgdg 发行版只包含每个软件包的最新版本。旧版本在 https://apt-archive.postgresql.org/ 上的存档中提供。
GPG 错误:无效签名
如果你从 apt-get update 获得类似以下内容的错误
W: A error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: http://apt.postgresql.org squeeze-pgdg Release: The following signatures were invalid: KEYEXPIRED 1381654177
...表示存储库密钥的副本已过时。在大多数情况下,rm /etc/apt/trusted.gpg.d/apt.postgresql.org.gpg 将通过删除密钥的第二个副本来解决此问题。使用 apt-key list 检查。
systemd 集成
postgresql-common 软件包包含 systemd 服务文件,用于处理已安装群集的启动/停止/重新加载。
不幸的是,随 wheezy 一起提供的 systemd 版本与服务文件的“reload”部分不兼容。升级到 wheezy-backports 中的 systemd 版本以进行修复。(jessie 及较新的 Debian 和 Ubuntu 版本的用户不受影响,那里的 systemd 版本已足够新。)