我使用备份
pg_dump db_production > postgres_db.dump
然后使用scp将其复制到localhost。
现在,当我导入本地数据库时,它给出了一个错误
pg_restore: [archiver] input file appears to be a text format dump. Please use psql.
通过使用逗号
pg_restore -d db_development postgres_db.dump
我使用备份
pg_dump db_production > postgres_db.dump
然后使用scp将其复制到localhost。
现在,当我导入本地数据库时,它给出了一个错误
pg_restore: [archiver] input file appears to be a text format dump. Please use psql.
通过使用逗号
pg_restore -d db_development postgres_db.dump
Answers:
来自 pg_dump
文档中:
例子
要将名为mydb的数据库转储到SQL脚本文件中:
$ pg_dump mydb > db.sql
要将这样的脚本重新加载到(新创建的)名为newdb的数据库中:
$ psql -d newdb -f db.sql
要将数据库转储到自定义格式的存档文件中:
$ pg_dump -Fc mydb > db.dump
要将数据库转储到目录格式的存档中:
$ pg_dump -Fd mydb -f dumpdir
要将存档文件重新加载到名为newdb的(新创建的)数据库中:
$ pg_restore -d newdb db.dump
从pg_restore
文档中:
例子
假设我们已经将名为mydb的数据库转储到了自定义格式的转储文件中:
$ pg_dump -Fc mydb > db.dump
删除数据库并从转储中重新创建它:
$ dropdb mydb
$ pg_restore -C -d postgres db.dump
对我来说,当我尝试从使用的远程主机还原时
psql -U username -p 5432 -h 10.10.10.1 -d database < db.dump
工作正常。如果不是远程,则仅执行以下命令即可。
psql -d database < db.dump
为了使用pg_dump
与之兼容的备份,在创建转储时pg_restore
必须使用--format=custom
/ -Fc
。
从文档:
输出适合输入到pg_restore的自定义格式的存档。
因此,您的pg_dump
命令可能类似于:
pg_dump --file /tmp/db.dump --format=custom --host localhost --dbname my-source-database --username my-username --password
和您的pg_restore
命令:
pg_restore --verbose --clean --no-acl --no-owner --host localhost --dbname my-destination-database /tmp/db.dump
如果您有完整的数据库转储:
PGPASSWORD="your_pass" psql -h "your_host" -U "your_user" -d "your_database" -f backup.sql
但是,如果将模式分别保存,则将无法正常工作。然后,您需要禁用类似于的数据插入触发器pg_restore --disable-triggers
。然后,您可以使用以下命令:
cat database_data_only.gzip | gunzip | PGPASSWORD="your_pass" psql -h "your_host" -U root "your_database" -c 'SET session_replication_role = replica;' -f /dev/stdin
从侧面说,我认为这是postgres的一个非常不幸的缺点。在中创建转储的默认方法与pg_dump
不兼容pg_restore
。但是,有了一些附加键。WTF?