PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Utiliser le résultat de pg_dump comme entrée pour pg_restore

Ce qui suit s'en rapproche :

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

Sauf que cela ne fonctionne pas si le dbNameTest n'existe pas encore. Ce qui suit fait le travail (bien qu'il se plaigne si le dbNameTest existe déjà. Je peux vivre avec ça)

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

Un oneliner avec des options courtes serait :

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

Un script sh pg_copy_schema donnerait quelque chose comme :

#!/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"