我需要在同一台服务器上克隆一个数据库(仅模式)。我想使用来自 pg_dump 的输入并将其通过管道传输到 pg_restore。我知道这可以用 psql 完成,但 psql 没有“-c clean”选项。
这可能但使用 pg_restore 吗?
pg_dump --schema public dbName | psql dbNameTest
我需要在同一台服务器上克隆一个数据库(仅模式)。我想使用来自 pg_dump 的输入并将其通过管道传输到 pg_restore。我知道这可以用 psql 完成,但 psql 没有“-c clean”选项。
这可能但使用 pg_restore 吗?
pg_dump --schema public dbName | psql dbNameTest
以下接近:
pg_dump --schema-only --format c dbName | \
pg_restore --schema-only --clean --dbname=dbNameTest
除非它不dbNameTest
存在,否则它不起作用。以下完成了这项工作(尽管如果dbNameTest
已经存在它会抱怨。我可以忍受)
createdb dbNameTest
pg_dump --schema-only --format c dbName | \
pg_restore --schema-only --clean --dbname=dbNameTest
具有短选项的 oneliner 将是:
createdb dbNameTest ; pg_dump -s -F c dbName | pg_restore -s -c -d dbNameTest
一个 sh 脚本pg_copy_schema
会是这样的:
#!/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"
http://www.postgresql.org/docs/9.1/static/app-pgdump.html
您需要将 -F 与 -c 、 -d 或 -t 选项与 pg_dump 结合使用,以便将其与 pg_restore 一起使用。您不能将 pg_restore 与纯文本 SQL 转储一起使用。