나는 (경험이 거의 없는) 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)
추신: PostgreSQL은 비밀번호가 아닌 인증을 사용하도록 설정할 수 있습니다. 이를 통해 스크립트에 비밀번호를 입력할 필요가 없습니다. 적어도 로컬 인스턴스에 대해 실행할 때는 그렇습니다.
PPS: 또는 pg_database에서 선택하여 grep/awk 혼동을 피할 수 있습니다.
$ psql postgres -Atc 'select datname from pg_database'
postgres
template0
⋮
template1
test