Postgresql

如何使 pg_dump 跳過擴展?

  • January 12, 2022

這是在 9.3 上,但我記得自 7.x 以來發生的類似事情。所以我創建數據庫並在其中安裝 plpgsql 擴展。稍後我創建了一個 pg_dump 並在將其恢復到數據庫之前確保它也具有 plpgsql 副檔名。然後在恢復時發生這種情況:

pg_restore: creating EXTENSION plpgsql
pg_restore: creating COMMENT EXTENSION plpgsql
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 2053; 0 0 COMMENT EXTENSION plpgsql
pg_restore: [archiver (db)] could not execute query: ERROR:  must be owner of extension plpgsql
Command was: COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';

我正在創建一堆腳本,而 pg_restore 返回 0 對我來說非常重要,所以我可以忽略這一點並沒有任何好處。令我困惑的是,IIRC 我需要以 postgres 主使用者的身份創建擴展,所以我不知道為什麼所有這些 EXTENSION 的東西都會在我的轉儲中結束。畢竟,我不是語言/擴展的所有者?

無論如何,對於如何擺脫這個問題的任何建議,我將不勝感激。請注意,我知道 -l/-L 開關是如何工作的。然而,這似乎是為了糾正一個簡單的擴展評論而付出的太多努力。

對於任何尋找解決方法的人來說,限製pg_restore到特定的模式已經幫助我解決了這個錯誤。見https://stackoverflow.com/a/11776053/11819

你可以做

pg_dump ... | grep -v -E '^(CREATE\ EXTENSION|COMMENT\ ON)' >out.sql

這是我用 postgres 導入到Google云 sql 的東西。

編輯:添加了“行首”插入符號以不排除包含此文字的行。

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