将Ubuntu 12.04升级到14.04后,PostgreSQL无法重新安装

我运行了do-release-upgrade来将Ubuntu 12.04服务器更新到Ubuntu 14.04。 它看起来很顺利,但是当我在升级后进行apt-get update ,我注意到PostgreSQL软件包仍在查看精确的存储库,而不是可信赖的存储库。 我按照这里的说明添加了可信赖的存储库,并将包含精确存储库的.list文件移动到临时目录作为备份。 在我这样做之后, sudo apt-get upgrade失败了,即使恢复了精确的回购,我也无法让它再次完全运行。 我没碰巧抓住错误信息。 由于这是一个开发服务器而且所有数据都不是必需的,所以我决定重新安装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 postgresql@9.5-main.service failed to load: No such file or directory. See system logs and 'systemctl status postgresql@9.5-main.service' 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 postgresql@9.5-main.service我会得到:

 postgresql@9.5-main.service 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   (no description available) un postgresql-8.0   (no description available) un postgresql-9.1   (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   (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   (no description available) 

我有同样的问题,将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选项来启动或停止postgresql而不使用systectl。

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

 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;/usr/bin/pg_ctlcluster检查$skip_systemctl_redirect之前。

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 

在木偶中它看起来像这样

  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", } 

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

postgresql-9.5软件包不提供systemd启动单元文件,而是提供一个sysV脚本,upstart处理正常(这里刚刚测试过)。

可能的选择:

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

……我没有想法;)

搜索之后,我来到这篇文章是因为我的服务器有多个版本的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 postgresql@9.4-main.service failed to load: No such file or directory. See system logs and 'systemctl status postgresql@9.4-main.service' for details. 

阅读完所有答案后,我更喜欢答案: https : //askubuntu.com/a/877472/130195但是如果想要保持systemd安装,Ubuntu 14.04不完全支持,请遵循该hack。

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

我认为只需一个简单的sudo apt-get purge systemd && sudo apt-get autoremove通过删除systemd包解决问题。

警告:在拆卸任何包装之前,请小心,注意要小心取出的物品。