Postgresql
如何使 pg_dump 跳過擴展?
這是在 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 的東西。
編輯:添加了“行首”插入符號以不排除包含此文字的行。