私は(経験の少ない)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
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