Backup
將 postgres 數據庫轉儲到單獨的文件中
我繼承了一個 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