我使用备份
pg_dump db_production > postgres_db.dump
然后我使用 scp 将它复制到本地主机。
现在,当我在本地数据库上导入时,它会出现错误
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 将它复制到本地主机。
现在,当我在本地数据库上导入时,它会出现错误
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
文档中:
例子
要将名为 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 db_development < postgres_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
对我来说,当我尝试从我使用的远程主机恢复时
psql -U username -p 5432 -h 10.10.10.1 -d database < db.dump
工作正常。如果不是远程的,只需执行以下命令即可。
psql -d database < db.dump
对我来说,它就像这样工作。
C:\Program Files\PostgreSQL\12\bin> psql -U postgres -p 5432 -d dummy -f C:\Users\Downloads\d2cm_test.sql
如果您有完整的数据库转储:
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
. 然而,有了一些额外的键,它是。怎么回事?
如果您使用带有 -Fp 的 pg_dump 以纯文本格式备份,请使用以下命令:
cat db.txt | psql dbname
将所有数据复制到名为 dbname 的数据库中
如果您恢复 .SQL 文件。 在 pgAdmin 中创建一个新数据库。转到终端并导航 .sql 文件所在的文件夹/目录。然后在终端中编写以下命令。
语法: supername user postgres psql newDatabasename < inputfile.sql
示例:
sudo -u postgres psql newDb < restoreDb.sql
可能当您创建备份时,您想在另一个网络中恢复它或创建远程恢复。
我们需要使用--format=custom
[ -Fc
] 创建一个备份文件,然后使用pg_restore
. 我们可以使用连接字符串并将,和postgresql://<user>:<pass>@localhost:5432/<dbname>
替换为您的信息。<user>
<pass>
<dbname>
pg_dump -v -Fc \
postgresql://<user>:<pass>@localhost:5432/<dbname> \
> db-20211122-163508.sql
要恢复,我们将使用--clean
[ -c
] 和--create
[ -C
] 调用它,以便在恢复之前删除数据库。将<user>
、<host>
、<port>
和替换<dbname>
为您的信息。
pg_restore -vcC \
-U <user> \
-h <host> \
-p <port> \
-d <dbname> \
< db-20211122-163508.sql
如果你用这种方式备份,我想这会更容易导入数据库。
pg_dump -h(远程数据库地址)-a --column-inserts -U postgres(数据库名)>(文件名).sql
对于进口,
psql
-f (文件名).sql
--host (远程数据库地址)
--port 5432
--username postgres
--password (你的密码)
--dbname (你要导入的数据库)