使用pg_dump结果作为pg_restore的输入

时间:2012-06-19 14:35:37

标签: postgresql

我需要在同一台服务器上克隆数据库(仅架构)。 我想使用pg_dump的输入并将其传递给pg_restore。我知道这可以用psql完成,但psql没有" -c clean"选项。

这可能,但pg_restore?

 pg_dump --schema public dbName | psql dbNameTest

2 个答案:

答案 0 :(得分:12)

接下来是:

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"

答案 1 :(得分:2)

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

您需要将-F与-c,-d或-t选项结合使用pg_dump,以便将其与pg_restore一起使用。您不能将pg_restore与纯文本SQL转储一起使用。