Dumping postgres DBs em arquivos separados

2

Eu herdei um banco de dados postgres (com o qual tenho pouca experiência) e tentando descobrir uma maneira de copiar / fazer backup. Eu tenho lido documentos sobre isso e posso chegar até a despejar os bancos de dados em arquivos separados, mas me perguntando por que não posso copiar template0 . Pelo que entendi, este é um tipo de modelo "defaults" que parece importante para pendurar se modificado. Por que isso não está funcionando?

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
    
por Server Fault 02.08.2018 / 19:27

1 resposta

2

template0 é criado ao instalar o PostgreSQL e não deve conter nenhuma modificação local; não deveria haver necessidade de fazer o backup. Modificações locais vão para template1 . (Veja link ).

Ele está falhando porque template0 não permite conexões (que é o padrão, para protegê-lo contra modificações locais acidentais):

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

PS: O PostgreSQL pode ser configurado para usar autenticação sem senha, o que evitará que você tenha que colocar uma senha em seu script. Pelo menos quando correr contra uma instância local.

PPS: Além disso, você pode salvar essa confusão do grep / awk com um select do pg_database:

$ psql postgres -Atc 'select datname from pg_database' 
postgres
template0
⋮
template1
test
    
por 02.08.2018 / 19:58