PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Verwenden Sie das Ergebnis von pg_dump als Eingabe für pg_restore

Folgendes kommt nahe:

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

Außer es funktioniert nicht, wenn der dbNameTest existiert noch nicht. Das Folgende erledigt den Job (obwohl es sich beschwert, wenn der dbNameTest ist bereits vorhanden. damit kann ich leben)

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

Ein Einzeiler mit kurzen Optionen wäre:

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

Ein sh-Skript pg_copy_schema würde etwa so aussehen:

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