PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Usa il risultato pg_dump come input per pg_restore

Il seguente si avvicina:

pg_dump --schema-only --format c dbName | \
  pg_restore --schema-only --clean --dbname=dbNameTest

Tranne che non funziona se il dbNameTest non esiste ancora. Quanto segue fa il lavoro (anche se si lamenta se il dbNameTest esiste già. Posso conviverci)

createdb dbNameTest
pg_dump --schema-only --format c dbName | \
  pg_restore --schema-only --clean --dbname=dbNameTest

Un oneliner con opzioni brevi sarebbe:

createdb dbNameTest ; pg_dump -s -F c dbName | pg_restore -s -c -d dbNameTest

Uno script sh pg_copy_schema sarebbe qualcosa del tipo:

#!/bin/sh
if [ -z "$2" ] ; then echo "Usage: `basename $0` original-db new-db" ; exit 1 ; fi
echo "Copying schema of $1 to $2"
createdb "$2" 2> /dev/null
pg_dump --schema-only --format c "$1" | pg_restore --schema-only --clean --dbname="$2"