1. 程式人生 > >將 12.04升級到 14.04後,PostgreSQL無法重新安裝

將 12.04升級到 14.04後,PostgreSQL無法重新安裝

問題:

我執行 do-release-upgrade 來更新 Ubuntu 12.04伺服器到 Ubuntu 14.04. 雖然我的升級工作很順利,但是當我升級之後,我發現PostgreSQL的包仍然在看的精確的倉庫,而不是收費的trusty庫。 按照下面的說明,我將信任庫新增到一個臨時目錄中,將包含精確倉庫的.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 
[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)

iPhone 7 還沒出來,我們已經在iPhone上獲取細節 8,或者不管是想到下一步。 /var/log/postgresql/postgresql-9.5-main.log 日誌檔案為空,所以我不確定該在哪裡檢查日誌。 安裝失敗後,我將通過這裡的步驟來完成一個完全解除安裝。 我無法判斷這是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 。

所以你需要加入 --skip-systemctl-redirect/usr/share/postgresql-common/init.d-functions 在 do_ctl_all() 函式中。因此它將如下所示。

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 簽入到 /usr/bin/pg_ctlcluster 之前新增 $skip_systemctl_redirect = 1;

回答 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預設不在服務/init管理中使用 systemd 。 由於某些原因,安裝外掛是使用 systemd ( 你知道為什麼)的,但是它應該使用帶有一個包裝器的新的sysV啟動指令碼的。

postgresql-9.5 包不提供systemd啟動單元檔案,而是提供一個sysV指令碼,upstart處理精細的( 剛測試過) 。

可能的選項:

回答 4:

搜尋之後,我來到這個帖子,因為我的伺服器有 9.4個版本的Postgresql,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.

我們已經不需要 systemd,我在我的系統上使用了aptitude來安裝 systemd 版本 204,我在我的系統中,我不需要。 刪除我不再需要的任何東西,而且所有三個版本的PostgreSQL都在工作。

我覺得只是一個簡單 sudo apt-get purge systemd && sudo apt-get autoremove 通過刪除 systemd 軟體包來解決問題。

警告:請小心,在移除任何包裝之前,注意將要移除的內容。