Ubuntu 12.04 升级至 14.04 后 PostgreSQL 重新安装失败

Ubuntu 12.04 升级至 14.04 后 PostgreSQL 重新安装失败

我尝试do-release-upgrade将 Ubuntu 12.04 服务器更新到 Ubuntu 14.04。一切似乎都很顺利,但apt-get update升级后我注意到 PostgreSQL 软件包仍然在查看精确的repos 而不是可靠存储库。我遵循此处的说明添加可信存储库,并将.list包含精确存储库的文件移动到临时目录作为备份。我这样做之后,sudo apt-get upgrade失败了,即使在恢复了精确的repos。我没有抓取错误消息。由于这是一台开发服务器,并且所有数据都不是必需的,因此我决定重新安装 PostgreSQL。在多次尝试清除服务器上可能存在的任何自定义配置(我认为这些配置可能会造成干扰)后,此操作反复失败。我可以成功完成sudo apt-get install postgresql-common,但如果我尝试,sudo apt-get install postgresql-9.5则会失败并显示以下内容:

Setting up postgresql-9.5 (9.5.5-1.pgdg14.04+1) ...
Creating new cluster 9.5/main ...
  config /etc/postgresql/9.5/main
  data   /var/lib/postgresql/9.5/main
  locale en_US.UTF-8
  socket /var/run/postgresql
  port   5432
update-alternatives: using /usr/share/postgresql/9.5/man/man1/postmaster.1.gz to provide /usr/share/man/man1/postmaster.1.gz (postmaster.1.gz) in auto mode
 * Starting PostgreSQL 9.5 database server                                                                                             
 * Failed to issue method call: Unit [email protected] failed to load: No such file or directory. See system logs and 'systemctl status [email protected]' for details.
                                                                                                                               [fail]
invoke-rc.d: initscript postgresql, action "start" failed.
dpkg: error processing package postgresql-9.5 (--configure):
 subprocess installed post-installation script returned error exit status 1
dpkg: dependency problems prevent configuration of postgresql-contrib-9.5:
 postgresql-contrib-9.5 depends on postgresql-9.5 (= 9.5.5-1.pgdg14.04+1); however:
  Package postgresql-9.5 is not configured yet.

dpkg: error processing package postgresql-contrib-9.5 (--configure):
 dependency problems - leaving unconfigured
Setting up sysstat (10.2.0-1) ...
No apport report written because the error message indicates its a followup error from a previous failure.
                                                                                                          update-alternatives: using /usr/bin/sar.sysstat to provide /usr/bin/sar (sar) in auto mode
Processing triggers for libc-bin (2.19-0ubuntu6.9) ...
Errors were encountered while processing:
 postgresql-9.5
 postgresql-contrib-9.5
E: Sub-process /usr/bin/dpkg returned an error code (1)

Jan 17 15:31:31 beta kernel: [    4.029504] systemd-journald[543]: Failed to resolve 'systemd-journal' group: No such process

如果我尝试,我会得到:systemctl status [email protected]

[email protected]
   Loaded: error (Reason: No such file or directory)
   Active: inactive (dead)

日志文件/var/log/postgresql/postgresql-9.5-main.log是空的,所以我不知道在哪里可以查看日志。安装失败后,我查看了这里的步骤进行完全卸载。我不知道这是 PostgreSQL 的问题还是升级后的服务器的问题。

更新:输出dpkg -l "postgresql*"

Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                         Version             Architecture        Description
+++-============================-===================-===================-==============================================================
un  postgresql-7.4               <none>              <none>              (no description available)
un  postgresql-8.0               <none>              <none>              (no description available)
un  postgresql-9.1               <none>              <none>              (no description available)
iF  postgresql-9.5               9.5.5-1.pgdg14.04+1 amd64               object-relational SQL database, version 9.5 server
un  postgresql-client            <none>              <none>              (no description available)
ii  postgresql-client-9.5        9.5.5-1.pgdg14.04+1 amd64               front-end programs for PostgreSQL 9.5
ii  postgresql-client-common     178.pgdg14.04+1     all                 manager for multiple PostgreSQL client versions
ii  postgresql-common            178.pgdg14.04+1     all                 PostgreSQL database-cluster manager
iU  postgresql-contrib-9.5       9.5.5-1.pgdg14.04+1 amd64               additional facilities for PostgreSQL
un  postgresql-doc-9.5           <none>              <none>              (no description available)

答案1

我遇到了同样的问题,将 Ubuntu 12.04 升级到了 14.04。不知道,但它也使用 systemd。检查/etc/init.d/postgresql文件时它使用/usr/share/postgresql-common/init.d-functions

该文件执行/usr/bin/pg_ctlcluster来启动和停止postgresql服务器。

if [ "$1" = "stop" ] || [ "$1" = "restart" ]; then
    ERRMSG=$(pg_ctlcluster --force "$2" "$name" $1 2>&1)
else
    ERRMSG=$(pg_ctlcluster "$2" "$name" $1 2>&1)
fi

/usr/bin/pg_ctlcluster文件接受--skip-systemctl-redirect在没有 systectl 的情况下启动或停止 postgresql 的选项。

因此您需要在 do_ctl_all() 函数中添加--skip-systemctl-redirect/usr/share/postgresql-common/init.d-functions因此它看起来会像这样。

if [ "$1" = "stop" ] || [ "$1" = "restart" ]; then
    ERRMSG=$(pg_ctlcluster --skip-systemctl-redirect --force "$2" "$name" $1 2>&1)
else
    ERRMSG=$(pg_ctlcluster --skip-systemctl-redirect "$2" "$name" $1 2>&1)
fi

或者您可以在签到$skip_systemctl_redirect = 1;之前添加。$skip_systemctl_redirect/usr/bin/pg_ctlcluster

答案2

Ubuntu 从 12.04 升级到 14.04 时也出现同样的问题

通过添加行来修复

alias pg_ctlcluster="pg_ctlcluster --skip-systemctl-redirect"

/usr/share/postgresql-common/init.d-functions 之后

init_functions=/lib/lsb/init-functions

在 Puppet 中它看起来像这样

  package { 'postgresql-common': ensure => 'installed' }
  file_line { 'Patch 1 /usr/share/postgresql-common/init.d-functions':
    path => '/usr/share/postgresql-common/init.d-functions',
    line => 'alias pg_ctlcluster="pg_ctlcluster --skip-systemctl-redirect"',
    after => "init_functions=/lib/lsb/init-functions",
  }

答案3

重新编辑:Ubuntu 14.04 默认不使用 systemd 进行服务/初始化管理。出于某种原因,您的安装使用 systemd(您知道为什么吗?),但它应该使用 upstart 和用于旧式 sysV 启动脚本的包装器。

postgresql-9.5 包不提供 systemd 启动单元文件,而是提供了一个 upstart 可以很好处理的 sysV 脚本(刚刚在这里测试过)。

可能的选择:

  1. 切换回 upstart 进行 init 管理
  2. 为 postgresql-9.5 编写自己的 systemd 启动脚本

...我没什么主意了 ;)

答案4

搜索一段时间后,我看到了这篇文章,因为我的服务器有 Postgresql 9.4、9.5、9.6 多个版本,并且得到了相同的行为。

sudo pg_lsclusters 9.4 main status
Ver Cluster Port Status Owner    Data directory               Log file
9.4 main    5432 down   postgres /var/lib/postgresql/9.4/main 
/var/log/postgresql/postgresql-9.4-main.log
9.5 main    5433 down   postgres /var/lib/postgresql/9.5/main 
/var/log/postgresql/postgresql-9.5-main.log
9.6 main    5434 down   postgres /var/lib/postgresql/9.6/main 
/var/log/postgresql/postgresql-9.6-main.log

尝试启动 postgresql 时一直显示:

sudo pg_ctlcluster 9.4 main start
Redirecting start request to systemctl
Failed to issue method call: Unit [email protected] failed to load: No such file or directory. See system logs and 'systemctl status [email protected]' for details.

阅读完所有答案后,我更喜欢这个答案:https://askubuntu.com/a/877472/130195 但是如果想要保留systemdUbuntu 14.04 不完全支持的安装,请按照该技巧操作。

但我认为我们不需要systemd,我已经使用 aptitude 了解安装systemd版本 204 的要求,在我的系统上upower,我也不需要upower。删除不再需要的任何东西,所有三个版本的 postgresql 都可以再次运行。

我认为只需sudo apt-get purge systemd && sudo apt-get autoremove删除包就可以更好地解决问题systemd

警告:在移除任何包装之前,请小心谨慎,小心注意要移除的东西。

相关内容