Postgresql

pg_dump 與 psql 版本不同

  • December 7, 2021

我將 postgres 更新到 14 版sudo apt upgrade

psql --version
psql (PostgreSQL) 14.1 (Ubuntu 14.1-2.pgdg20.04+1)

pg_dump沒有升級其他所有內容:

pg_dump --version
pg_dump (PostgreSQL) 12.9 (Ubuntu 12.9-2.pgdg20.04+1)

知道為什麼嗎?

我還清除了所有 postgres 並重新安裝postgresql-14

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

sudo apt-get update

sudo apt-get -y install postgresql-14

但是之後:

pg_dump --version      
Error: PostgreSQL version 12 is not installed

執行 Ubuntu 20.04。

更新:

添加執行結果pg_lsclusters

pg_lsclusters
Ver Cluster Port Status                Owner    Data directory              Log file
12  main    5432 down,binaries_missing postgres /var/lib/postgresql/12/main /var/log/postgresql/postgresql-12-main.log
14  main    5433 online                postgres /var/lib/postgresql/14/main /var/log/postgresql/postgresql-14-main.log

的輸出pg_lsclusters表明 Postgres 12 二進製文件在沒有先刪除 Postgres 12 實例的情況下被解除安裝。請注意該Status列如何顯示binaries_missing。刪除腳本會特別注意在您解除安裝時不要破壞您的數據,這就是為什麼實例及其數據可能有點粘滯的原因。

要刪除“殭屍”實例,請使用

$ sudo pg_dropcluster 12 main

然後只有14/main實例會保留在列表中,通過 Debian/Ubuntu pg_wrapper 腳本pg_lsclusters的 pg_dump 和其他客戶端應用程序將首先停止選擇實例。12/main

您可能還想將您的14/main實例重新定位到該5432埠,因為它是 Postgres 的預設埠,如果您不打算在同一主機上擁有多個實例,使用預設埠將使您的生活更輕鬆。

引用自:https://dba.stackexchange.com/questions/303607