
我在我的電腦上安裝了兩個 PostgreSQL 伺服器。一個是9.1,另一個是9.3。我需要安裝兩台伺服器。
然而,當我運行 pg_dump 時,我收到版本不匹配錯誤:
server version: 9.3.6; pg_dump version: 9.1.15
pg_dump: aborting because of server version mismatch
我該如何解決? (無法卸載任何版本 - 我先安裝了 9.1,幾個月後安裝了 9.3 - 我需要兩個都安裝資料庫伺服器)。
答案1
長話短說:如果兩個 PostgreSQL 實例都由 Ubuntu 軟體包管理(理應如此),只需使用該--cluster
選項選擇要備份的 PostgreSQL 實例,它將自動選擇對應版本的 pg_dump:
pg_dump --cluster 9.1/main [other pg_dump options]
或者
pg_dump --cluster 9.3/main [other pg_dump options]
。
main
只是一個預設值,運行pg_lsclusters
即可在該列中查看您的實際名稱Cluster
。
它是如何工作的:由 Ubuntu 軟體包安裝,/usr/bin/pg_dump
實際上是一個到 的軟鏈接/usr/share/postgresql-common/pg_wrapper
,其目的正是選擇正確的實例並運行相應的二進製文件。--cluster
不存在於普通的 PostgreSQL 命令中,它是 Debian/Ubuntu 的補充,旨在解決這個多版本/多路徑問題。
psql
這對於、createdb
、等來說也是一樣createuser
。/usr/bin
pg_wrapper
看人 pg_wrapper了解更多。
答案2
您可以使用:
sudo find / -name pg_dump
pg_dump
在我的例子中找到您的版本:/usr/pgsql-9.6/bin/pg_dump
所以接下來我們可以做:
sudo ln -sfn /usr/pgsql-9.6/bin/pg_dump /usr/bin/pg_dump
為了更新到我們所需要的
答案3
如果您正在執行 docker,則可以執行任何版本的 pg_dump,而無需管理多個安裝。這將/path/to/dump/to/myfilename.dump
使用 postgres 12.5寫入一個檔案:
docker run --rm --network=host -v "/path/to/dump/to:/tmp/dump" \
postgres:12.5 pg_dump -Fc -v --dbname="my_db_bame" -f "/tmp/dump/myfilename.dump"
--rm
命令完成後刪除容器--network=host
將容器連接到主機本地網絡-v ...
將您的主機目錄 (/path/to/dump/to
) 安裝到容器內的暫存目錄
您只需確保掛載到 ( /tmp/dump
) 的目錄與 pg_dump 正在寫入的目錄相同。
然後你可以將 12.5 改為你想要的任何版本。