簡體   English   中英

PostgreSQL:pg_dump + psql與模板創建的區別?

[英]PostgreSQL: Difference between pg_dump + psql versus template create?

我知道有兩種方法可以復制數據庫。

一種是將數據庫導出為巨型SQL文件,然后將其作為單獨的數據庫加載:

pg_dump <database> | psql <new database>

另一種方法是將數據庫名稱作為模板傳遞給數據庫創建參數:

createdb -T <database> <new database>

這兩種方法有什么區別,如果有的話? 使用一個在另一個上有什么好處,比如性能?

CREATE DATABASE / createdb與模板一起使用會生成目錄副本,而pg_dump + psql必須序列化和反序列化整個數據庫,將它們發送到客戶端,並且必須通過事務和預寫日志記錄運行所有內容機械。 所以前一種方法應該快得多。

缺點是CREATE DATABASE在復制模板數據庫時將其鎖定。 因此,如果您想要創建實時數據庫的副本,那將無法正常工作。 但是,如果您想快速制作非活動/模板數據庫的副本,那么使用CREATE DATABASE可能是正確的解決方案。

根據目前的文檔

雖然可以通過將其名稱指定為模板來復制除template1之外的數據庫,但這還不是(通常)用作通用“COPY DATABASE”工具。 主要限制是在復制模板數據庫時不能將其他會話連接到模板數據庫。 如果啟動時存在任何其他連接,則CREATE DATABASE將失敗; 否則,在CREATE DATABASE完成之前,將鎖定與模板數據庫的新連接。

除了可以追溯到至少版本8.2的溫和警告之外,您還可以使用createdb進行某些更改 - 例如更改排序規則,編碼等。(在限制范圍內)。

就個人而言,我很難證明使用完全數據庫鎖的createdb來復制生產數據庫。

我認為另一個主要區別是“轉儲和加載”是一種完全支持的復制數據庫的方式。 此外,您可以將轉儲的副本攜帶到隔離的開發計算機,以便在需要時進行測試。 (createdb實用程序必須同時訪問源和目標。)但是我沒有使用createdb來制作副本,所以我可能錯了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM