Backup

將 postgres 數據庫轉儲到單獨的文件中

  • August 2, 2018

我繼承了一個 postgres 數據庫(我對此幾乎沒有經驗)並試圖找出一種方法來轉儲/備份它。我一直在閱讀有關它的文件,並且可以將 DB 轉儲到單獨的文件中,但想知道為什麼我不能 dump template0. 據我了解,這是一種“預設”模板,如果修改,它似乎很重要。為什麼這不起作用?

test# export PGPASSWORD="xxxxxxx"; for database in `psql --username=postgres --command='\list' -h localhost | grep '^ [a-zA-Z0-9]' | awk '{print $1};'`; do pg_dump -U postgres ${database} > ${database}.sql; done                    

pg_dump: [archiver (db)] connection to database "template0" failed: FATAL:  database "template0" is not currently accepting connections

template0在安裝 PostgreSQL 時創建,不應包含任何本地修改;應該沒有必要備份它。改為進行本地修改template1。(參見https://www.postgresql.org/docs/current/static/manage-ag-templatedbs.html)。

它失敗是因為template0不允許連接(這是預設設置,以防止意外獲得本地修改):

postgres=# select datname, datallowconn from pg_database where datname = 'template0';
 datname  | datallowconn 
-----------+--------------
template0 | f
(1 row)

PS:可以將 PostgreSQL 設置為使用非密碼身份驗證,這樣您就不必在腳本中輸入密碼。至少在針對本地實例執行時。

PPS:此外,您可以通過從 pg_database 中選擇來避免 grep/awk 的混亂:

$ psql postgres -Atc 'select datname from pg_database' 
postgres
template0
⋮
template1
test

引用自:https://unix.stackexchange.com/questions/460150