2014-07-15 24 views
8

Ho un server db postgresql con più database al suo interno.Come ottenere un pg_dump -s per includere il comando CREATE DATABASE?

postgres=# \list 
           List of databases 
    Name  | Owner | Encoding | Collate | Ctype | Access privileges 
--------------+----------+-----------+---------+-------+----------------------- 
test1  | postgres | UTF8  | C  | C  | 
test2  | postgres | SQL_ASCII | C  | C  | 
test3  | postgres | SQL_ASCII | C  | C  | 
test4  | postgres | SQL_ASCII | C  | C  | 
template0 | postgres | SQL_ASCII | C  | C  | =c/postgres   + 
       |   |   |   |  | postgres=CTc/postgres 
template1 | postgres | SQL_ASCII | C  | C  | postgres=CTc/postgres+ 
       |   |   |   |  | =c/postgres 
(6 rows) 

Ho bisogno di un modo per creare un file di dump che contiene lo schema - inclusa una dichiarazione CREATE DATABASE - per il database che sto cercando di eseguire il dump.

Finora, ho capito che:

pg_dump -s -U postgres -d test1 > test1_only.sql 

creerà lo schema solo per il database test1, ma non include il comando CREATE DATABASE. L'unico modo sono stato in grado di ottenere il comando CREATE DATABASE ad apparire è stato quello di fare:

pg_dumpall -s -U postgres > /schema_alldatabases.sql 

sarà scaricare lo schema per tutti i database. Ma questo, naturalmente, include tutti gli schemi per tutti i database. Sul server su cui ho intenzione di ripristinare questo file, ho già test3 e test4 ... e non voglio sovrascriverli, poiché gli schemi sono diversi.

È comunque necessario che il comando pg_dump -s includa il comando CREATE DATABASE? Oppure, dovrei semplicemente usare pg_dumpall e controllare cosa ripristino? se è così, puoi mostrarmi come posso ripristinare test1 dal file dump?

Grazie.

risposta

10

Usa --create o -C opzione

pg_dump --create -s -U postgres -d test1 > test1_only.sql 

Iniziare l'uscita con un comando per creare il database stesso e riconnettersi al database creato. (Con uno script di questo modulo, non importa quale database nell'installazione di destinazione si connette prima di eseguire lo script.) Se viene specificato anche --clean, lo script interrompe e ricrea il database di destinazione prima di riconnettersi ad esso.

http://www.postgresql.org/docs/current/static/app-pgdump.html