postgresql-15 安装似乎失败

postgresql-15 安装似乎失败

如果这是一个愚蠢的问题,我提前道歉 - 我是一名开发人员,而不是系统管理员。

自从在我的 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包时,应该:

  1. 提供文件/etc/postgresql/15/main/postgresql.conf(以及该目录中的其他文件),然后
  2. 自动启动[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]

相关内容