Postgresql

pg_dump 參數“default_tablespace”的無效值期間的 postgresql 錯誤:“tbs_db1_index”

  • September 6, 2022

有人能幫助我嗎?:)

我有 2 台伺服器,想在獨占實例中拆分數據庫,所以我將我的數據庫 1 逐 1 遷移到第二台伺服器

Postgres 版本 11.16 兩台伺服器

所以這是我在 s1 上的命令

pg_dump db1 > /tmp/db1.dump

然後我在我的 s2 上恢復: 然後

psql -p 5432 db1 < /tmp/db1.dump

我得到這個錯誤

error: invalid value for parameter "default_tablestapce": "tbs_db1_index"

DETAIL: Tablespace "tbs_db1_index" does not exist

在此處輸入圖像描述, s1 上的 db1 位置與 s2 不同,這可能是問題所在,因為我在 s1 上沒有錯誤或任何問題,我的 db 很好

此外,恢復過程不會停止或中斷它仍在進行中(我的 db 很大)

PS,是的,我可以直接執行此操作,而無需通過此命令轉儲文件

pg_dump –no-owner db1 | psql -p 5432 -v ON_ERROR_STOP=1 -h 192.168.1.2 -U postgres db1

但也不起作用

表空間不是任何數據庫的一部分,因此它們不包含在pg_dump輸出中。如果您還想轉儲和恢復表空間,請pg_dumpall -tpg_dump您正在執行的操作之外使用(並首先恢復表空間)。如果要忽略轉儲中的表空間,請使用pg_dump --no-tablespaces.

這就是我解決這個問題的方法:

刪除現有的 tbs_db1_index 和 tbs_db1_data (即使它是空的!),因為當你創建數據庫時,這個文件是在 db 目錄中

創建的,在舊伺服器中創建名稱與舊伺服器相同的新表空間,

那麼這個命令在舊伺服器上沒有問題(s1)

pg_dump --no-owner db1 | psql -p 5432 -v ON_ERROR_STOP=1 -h 192.168.1.2 -U postgres db1

where 192.168.1.2 - 目標伺服器的地址,在我的例子中是 s2

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