我用
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文档:
pg_dump
例子
返回文章页面
$ pg_dump mydb > db.sql
$ 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文档:
pg_restore
假设我们已经将名为 mydb 的数据库转储到自定义格式的转储文件中:
删除数据库并从转储中重新创建它:
$ dropdb mydb $ pg_restore -C -d postgres db.dump
上面的答案对我来说不起作用,这个起作用了:
psql db_development < postgres_db.dump
如果使用 pg _ dump 和 -Fp 以纯文本格式进行备份,请使用以下命令:
cat db.txt | psql dbname
将所有数据复制到名为 dbname 的数据库
对于我来说,当我尝试从远程主机恢复我使用
psql -U username -p 5432 -h 10.10.10.1 -d database < db.dump
工作正常。如果不远程只是按照命令工作。
psql -d database < db.dump
如果你有一个完整的数据库转储:
PGPASSWORD="your_pass" psql -h "your_host" -U "your_user" -d "your_database" -f backup.sql
但是,如果您有单独保存的模式,那么就不会起作用。然后需要禁用数据插入触发器,类似于 pg_restore --disable-triggers。然后你可以这样做:
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不兼容。不过,有了一些额外的钥匙,就可以了。卧槽?
为了使用与 pg_restore兼容的 pg_dump创建备份,在创建转储时必须使用 --format=custom/-Fc。
--format=custom
-Fc
来自文件:
输出一个自定义格式的归档文件,该归档文件适合输入到 pg _ return 中。
因此,您的 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
对我来说,就像这样。
C:\Program Files\PostgreSQL\12\bin> psql -U postgres -p 5432 -d dummy -f C:\Users\Downloads\d2cm_test.sql
在创建备份时,可能需要在其他网络中还原备份或创建远程还原。
我们需要使用 --format=custom[ -Fc]创建一个备份文件,以便使用 pg_restore恢复它。我们可以使用连接字符串 postgresql://<user>:<pass>@localhost:5432/<dbname>并用您的信息替换 <user>、 <pass>和 <dbname>。
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>。
--clean
-c
--create
-C
<host>
<port>
pg_restore -vcC \ -U <user> \ -h <host> \ -p <port> \ -d <dbname> \ < db-20211122-163508.sql
如果你用这种方式备份,我认为这将更容易导入数据库。
Pg _ dump-h (远程 db 地址)-a —— column-insert-U postgres (database name) > (file name) . sql
进口方面,
< strong > 如果还原.SQL 文件。 在 pgAdmin 中创建一个新数据库。 转到终端并导航文件夹/目录。找到 sql 文件。然后在终端中写入以下命令。译注: < p > 句法: 超名用户 postgres psql newDatabasename < inputfile.sql
例如:
sudo -u postgres psql newDb < restoreDb.sql
我用 DBeaver 备份 db 时也出现了同样的错误。如果有人在 Windows 上使用 DBeaver 界面而不是命令行,请确保在备份和还原设置期间选择的格式为 沥青。< img src = “ https://i.stack.imgur.com/VfwpY.jpg”alt = “ enter image description here”/> < img src = “ https://i.stack.imgur.com/VfwpY.jpg”alt = “在这里输入图像描述”/>
提供一个简单的一行答案,为我工作,也将为您的大多数情况下工作
Psql-U username-d database _ name < dump _ file. sql
如果上面给出了与角色相关的错误,那么用 postgres 替换用户名。
Psql-U postgres-d database _ name < dump _ file. sql
psql -U <username> -d <database-name> -h <host-name> -f <backup.sql>
这就是解决办法,
Pg _ return-U username-p 5432-h 10.10.10.1-d database _ name < dump _ file
我也一直在努力解决这个问题。下面是我所使用的 dump 和 return 命令的组合:
pg_dump -Ft -C -h database_host -U username database > DATA.dump
恢复
pg_restore -x --no-owner -d database DATA.dump
如果希望在数据库中保留 一样访问权限(ACL) ,请删除 X标志。为此,数据库中必须具有相同的角色和用户。
https://www.postgresql.org/docs/15/app-pgdump.html
https://www.postgresql.org/docs/15/app-pgrestore.html