如果这是一个愚蠢的问题,我提前道歉 - 我是一名开发人员,而不是系统管理员。
自从在我的 ubuntu VM (Oracle VirtualBox) 上运行 apt-get update/upgrade 以来,我似乎无法使我的 postgresql 数据库联机。我相信这可能是因为 postgresql-15 已从 beta-3 升级到 beta-4。
这对我来说真的很麻烦,因为它破坏了我们的开发环境。(我假设当我们准备发布 15 时将完全可用,我真的很想能够merge
在我的代码中使用语句)
我从主机上删除了 postgresql,现在正在尝试进行全新安装,如下所示这些说明。
在步骤 3.sudo -u postgres psql
我收到以下错误:psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: No such file or directory Is the server running locally and accepting connections on that socket?
这本质上是我在升级失败后遇到的问题(尽管已经运行systemctl start postgresql
)
有人能建议我需要做什么才能启动并运行 postgres-15(最好是 beta-4)吗?
hugh@ububtuvm:~$ systemctl status postgresql
● postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; disabled; vendor p>
Active: active (exited) since Sun 2022-09-18 10:47:19 UTC; 31min ago
Process: 2349 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 2349 (code=exited, status=0/SUCCESS)
CPU: 905us
Sep 18 10:47:19 ububtuvm systemd[1]: Starting PostgreSQL RDBMS...
Sep 18 10:47:19 ububtuvm systemd[1]: Finished PostgreSQL RDBMS.
hugh@ububtuvm:~$ journalctl -xeu postgresql.service
░░ Subject: A stop job for unit postgresql.service has begun execution
░░ Defined-By: systemd
░░ Support: http://www.ubuntu.com/support
░░
░░ A stop job for unit postgresql.service has begun execution.
░░
░░ The job identifier is 1675.
Sep 18 10:47:19 ububtuvm systemd[1]: Starting PostgreSQL RDBMS...
░░ Subject: A start job for unit postgresql.service has begun execution
░░ Defined-By: systemd
░░ Support: http://www.ubuntu.com/support
░░
░░ A start job for unit postgresql.service has begun execution.
░░
░░ The job identifier is 1675.
Sep 18 10:47:19 ububtuvm systemd[1]: Finished PostgreSQL RDBMS.
░░ Subject: A start job for unit postgresql.service has finished successfully
░░ Defined-By: systemd
░░ Support: http://www.ubuntu.com/support
░░
░░ A start job for unit postgresql.service has finished successfully.
░░
░░ The job identifier is 1675.
root@ubuntuvm:/home/hugh# cat /usr/lib/systemd/system/postgresql.service
# postgresql.service is the meta unit for managing all PostgreSQL clusters on
# the system at once. Conceptually, this unit is more like a systemd target,
# but we are using a service since targets cannot be reloaded.
#
# The unit actually managing PostgreSQL clusters is [email protected],
# instantiated as [email protected] for individual clusters.
[Unit]
Description=PostgreSQL RDBMS
[Service]
Type=oneshot
ExecStart=/bin/true
ExecReload=/bin/true
RemainAfterExit=on
[Install]
WantedBy=multi-user.target
(通过 apt install 安装)
我发现这其中包含以下段落。
从 alpha 或 beta 版本更新后,我收到有关 CATALOG_VERSION 的错误。从 alpha 或 beta 包升级后,我收到如下错误:
数据库集群使用 CATALOG_VERSION_NO X 初始化,但服务器使用 CATALOG_VERSION_NO Y 进行编译。这是因为 PostgreSQL 数据格式可以在 alpha 版本之间发生变化 - 如果有非常迫切的需求,有时甚至在 beta 版本之间也会发生变化。
如果您需要访问旧数据,则需要使用之前运行的软件包版本,并使用 pg_dump 或 pg_upgrade。必要的二进制文件应该已保存在 /var/tmp/postgresql* 中。或者,在 /var/cache/apt/archives 中查找旧软件包。
然而,我仍在努力——我还没有在任何地方找到以前的版本。
答案1
Ubuntu 巧妙地支持运行多个 postgres 实例。该postgresql.service
单元只是一个虚拟单元:它除了运行什么也不做/bin/true
。这似乎没用,但事实并非如此!关键是它是依赖项此单元中重要的部分,它们是在启动时由 动态生成的/lib/systemd/system-generators/postgresql-generator
。
它将查看/etc/postgresql/*/*/postgresql.conf
系统上的所有文件并使用这些文件生成[email protected]
模板单元的实例。
当您安装该postgresql-15
包时,应该:
- 提供文件
/etc/postgresql/15/main/postgresql.conf
(以及该目录中的其他文件),然后 - 自动启动
[email protected]
装置。
我在 Ubuntu 22.04 系统上重现了这个问题,我从开始postgresql-14
,然后postgresql-15
按照问题中的链接进行安装,现在我有:
root@ubuntu:~# systemctl list-units postgresql\*
UNIT LOAD ACTIVE SUB DESCRIPTION
postgresql.service loaded active exited PostgreSQL RDBMS
[email protected] loaded active running PostgreSQL Cluster 14-main
[email protected] loaded active running PostgreSQL Cluster 15-main
我可以成功连接到数据库,但由于我在这里运行两个不同的 postgres 实例,因此我需要指定一个显式端口。查看配置文件/etc/postgresql/...
,我发现我的 postgres 15 实例正在使用端口 5433,因此我运行:
root@ubuntu:/# sudo -u postgres psql -p 5433
psql (15beta4 (Ubuntu 15~beta4-1.pgdg22.04+1))
Type "help" for help.
postgres=#
如果 Postgresql 15 服务启动失败,要查看服务状态,我将运行:
systemctl status [email protected]
要查看日志,我需要运行:
journalctl -u [email protected]