Postgresデータベースを別々のファイルにダンプする

Postgresデータベースを別々のファイルにダンプする

私は(経験の少ない)postgresデータベースを継承し、それをダンプ/バックアップする方法を見つけようとしました。私はそれに関するドキュメントを読んでいて、データベースを別のファイルにダンプできますが、なぜそれを行うことができないのか疑問に思います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

答え1

template0PostgreSQLがインストールされたときに作成されるため、ローカルの修正は含まれてはいけません。バックアップする必要もありません。代わりにローカル修正を行ってください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

関連情報