我们正在切换主机,旧主机提供了我们站点 PostgreSQL 数据库的 SQL 转储。
现在,我正在尝试在本地 WAMP 服务器上进行设置以进行测试。
唯一的问题是我不知道如何在我设置的 PostgreSQL 9 中导入这个数据库。
我尝试了 pgAdmin III,但似乎找不到“导入”功能。所以我只是打开 SQL 编辑器并将转储的内容粘贴到那里并执行它,它创建了表,但是当它试图将数据放入其中时它一直给我错误。
ERROR: syntax error at or near "t"
LINE 474: t 2011-05-24 16:45:01.768633 2011-05-24 16:45:01.768633 view...
The lines:
COPY tb_abilities (active, creation, modtime, id, lang, title, description) FROM stdin;
t 2011-05-24 16:45:01.768633 2011-05-24 16:45:01.768633 view nl ...
我也尝试使用命令提示符执行此操作,但找不到所需的命令。
如果我做
psql mydatabase < C:/database/db-backup.sql;
我得到错误
ERROR: syntax error at or near "psql"
LINE 1: psql mydatabase < C:/database/db-backu...
^
导入数据库的最佳方法是什么?
ERROR: syntax error at or near "t"
。事实证明,我只导入了部分模式,因此脚本前面的 CREATE TABLE
语句失败了。查看导入的完整输出以找到它。
psql databasename < data_base_dump
这就是您要查找的命令。
注意:必须在导入前创建 databasename
。看看PostgreSQL Docs Chapter 23. Backup and Restore。
这是您要查找的命令。
psql -h hostname -d databasename -U username -f file.sql
pg_restore -h hostname -d dbname -U username filename.sql
ERROR: duplicate key value violates unique constraint
?当有重复键时,我希望 psql
忽略
我相信你想在 psql 中运行:
\i C:/database/db-backup.sql
这对我有用:
sudo -u postgres psql db_name < 'file_path'
我不确定这是否适用于 OP 的情况,但我发现在交互式控制台中运行以下命令对我来说是最灵活的解决方案:
\i 'path/to/file.sql'
只要确保您已经连接到正确的数据库。此命令执行指定文件中的所有 SQL 命令。
psql
命令行内部执行脚本的方法。谢谢!
效果很好,在命令行中,所有参数都是必需的,-W 用于密码
psql -h localhost -U user -W -d database_name -f path/to/file.sql
只是为了好玩,如果您的转储被压缩,您可以执行类似的操作
gunzip -c filename.gz | psql dbname
正如 Jacob 所提到的,PostgreSQL docs 很好地描述了这一切。
我尝试了许多不同的解决方案来恢复我的 postgres 备份。我在 MacOS 上遇到了权限被拒绝的问题,似乎没有解决方案有效。
这是我如何让它工作的:
Postgres 带有 Pgadmin4。如果您使用 macOS,您可以按 CMD
+SPACE
并输入 pgadmin4
来运行它。这将在 chrome 中打开一个浏览器选项卡。
如果您在让 pgadmin4 工作时遇到错误,请在终端中尝试 killall pgAdmin4,然后重试。
获取 pgadmin4 + 备份/恢复的步骤
1. 创建备份
通过右键单击数据库->“备份”来执行此操作
https://i.stack.imgur.com/2hQt9.png
2. 给文件命名。
像test12345
。点击备份。这会创建一个二进制文件转储,它不是 .sql
格式
https://i.stack.imgur.com/FyEZm.png
3.查看下载位置
屏幕右下角应该有一个弹出窗口。单击“更多详细信息”页面以查看您的备份下载到的位置
https://i.stack.imgur.com/5cXqM.png
4.找到下载文件的位置
在这种情况下,它是 /users/vincenttang
https://i.stack.imgur.com/vJiyy.png
5.从pgadmin恢复备份
假设您正确执行了步骤 1 到 4,您将拥有一个还原二进制文件。有时您的同事可能想在他们的本地计算机上使用您的还原文件。说过人去 pgadmin 并恢复
通过右键单击数据库->“恢复”来执行此操作
https://i.stack.imgur.com/bAUhb.png
6.选择文件查找器
确保手动选择文件位置,不要将文件拖放到 pgadmin 中的上传器字段中。因为你会遇到错误权限。相反,找到您刚刚创建的文件:
https://i.stack.imgur.com/0FL3F.png
7.找到所说的文件
您可能需要将右下角的过滤器更改为“所有文件”。之后从第 4 步开始查找文件。现在点击右下角的“选择”按钮进行确认
https://i.stack.imgur.com/woFcW.png
8.恢复所述文件
您将再次看到此页面,并选择文件的位置。继续并恢复它
https://i.stack.imgur.com/i7cTv.png
9. 成功
如果一切正常,右下角应该会弹出一个显示成功恢复的指示器。您可以导航到您的表以查看每个表上的数据是否已正确恢复。
10. 如果不成功:
如果第 9 步失败,请尝试删除数据库上的旧公共架构。转到“查询工具”
https://i.stack.imgur.com/bqmyP.png
执行此代码块:
DROP SCHEMA public CASCADE; CREATE SCHEMA public;
https://i.stack.imgur.com/BaHyr.png
现在再次尝试步骤 5 到 9,它应该可以解决
概括
当我遇到错误权限问题并且无法以超级用户身份登录时,这就是我必须在 Postgres 上备份/恢复备份的方式。或者使用 chmod
为文件夹设置读/写凭据。此工作流程适用于来自 pgadmin 的二进制文件转储默认值“自定义”。我假设 .sql
是相同的方式,但我还没有测试过
确保创建了要导入的数据库,然后可以使用
sudo -u postgres -i psql testdatabase < db-structure.sql
如果要覆盖整个数据库,首先删除数据库
# be sure you drop the right database !!!
#sudo -u postgres -i psql -c "drop database testdatabase;"
然后重新创建它
sudo -u postgres -i psql -c "create database testdatabase;"
按照步骤:
转到 psql shell \c db_name \i path_of_dump [eg:-C:/db_name.pgsql]
我用:
cat /home/path/to/dump/file | psql -h localhost -U <user_name> -d <db_name>
希望这会对某人有所帮助。
如果您使用的是带有 .dump
扩展名的文件,请使用:
pg_restore -h hostname -d dbname -U username filename.dump
我注意到许多示例对于 localhost 来说过于复杂,其中在许多情况下只存在没有密码的 postgres 用户:
psql -d db_name -f dump.sql
您可以在 pgadmin3 中执行此操作。删除您的转储包含的架构。然后右键单击数据库并选择还原。然后您可以浏览转储文件。
PostgreSQL12
来自 sql 文件:pg_restore -d 数据库 < file.sql
来自自定义格式文件:pg_restore -Fc 数据库 < file.dump
我有超过 100MB 的数据,因此我无法使用 Pgadmin4 恢复数据库。
我只使用了 postgres 客户端,并在下面写了命令。
postgres@khan:/$ pg_restore -d database_name /home/khan/Downloads/dump.sql
它工作得很好,花了几秒钟。您可以查看下面的链接以获取更多信息。 https://www.postgresql.org/docs/8.1/app-pgrestore.html
-f
开关(或--file
)