使用 pg_dump 製作數據庫的精確副本的正確方法是什麼?
基本上,我正在嘗試製作一個 SQL 轉儲,它將製作數據庫的精確副本:使用者定義的函式、關係、約束、表、數據等。
這是可行的
pg_dump
還是psql
需要使用?我一直在使用
pg_dump -U user -cOx database > pg.sql
,但我並不完全清楚它是否擷取了所有內容。我在
pg_dump
這裡查看了所有的標誌:https://www.postgresql.org/docs/11/app-pgdump.html
我能想到的唯一一個可能會這樣做,因為它並沒有真正明確地說明,是
-s --schema-only
標誌,它不包括數據。我對此很好,並pg_dump
為數據執行了第二個,但我主要想確保我正在備份使用者定義的函式、關係等。
我不是 PostgreSQL 專家,但我認為他們的文件相當清楚,並且我相信您使用的命令幾乎就是您所需要的(您可能需要使用標誌指定密碼 - 不確定),除非您確實想要分兩步使用
--schema-only
,然後使用--data-only
:pg_dump 是一個用於備份 PostgreSQL 數據庫的實用程序。即使同時使用數據庫,它也會進行一致的備份。
pg_dump 只轉儲單個數據庫。要備份整個集群,或備份集群中所有數據庫共有的全域對象(例如角色和表空間),請使用 pg_dumpall。
轉儲可以腳本或存檔文件格式輸出。腳本轉儲是純文字文件,其中包含將數據庫重建到保存時的狀態所需的 SQL 命令。要從這樣的腳本中恢復,請將其提供給 psql。
本教程
pg_dump
也pg_dumpall
應該可以幫助您前進。最後,您可以做的最好的事情是在腳本生成後在測試數據庫中執行腳本並抽查您希望創建的不同內容(表、視圖、主鍵、外鍵、其他約束等) ) 在您對其來源的原始數據庫進行任何重大更改之前。