导入SQL dump到PostgreSQL数据库

我们正在切换主机,旧主机提供了我们站点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...
^

导入数据库的最佳方法是什么?

991421 次浏览
psql databasename < data_base_dump

这就是你要找的命令。

注意:databasename必须在导入之前创建。 看看PostgreSQL文档第23章。备份和恢复.

我相信你想在psql中运行:

\i C:/database/db-backup.sql

这是您正在寻找的命令。

psql -h hostname -d databasename -U username -f file.sql

你可以在pgadmin3中完成。删除转储文件中包含的模式。然后右键单击数据库并选择Restore。然后可以浏览转储文件。

这对我很管用:

sudo -u postgres psql db_name < 'file_path'

我不确定这是否适用于OP的情况,但我发现在交互控制台运行以下命令对我来说是最灵活的解决方案:

\i 'path/to/file.sql'

只需确保您已经连接到正确的数据库。该命令执行指定文件中的所有SQL命令。

我使用:

cat /home/path/to/dump/file | psql -h localhost -U <user_name> -d <db_name>

希望这能帮助到一些人。

只是为了好玩,如果你的转储被压缩了,你可以这样做

# EYZ0

正如Jacob提到的,PostgreSQL文档很好地描述了这一切。

工作得很好,在命令行中,所有参数都是必需的,-W是密码

psql -h localhost -U user -W -d database_name -f path/to/file.sql

我注意到很多例子对于localhost来说过于复杂,在很多情况下只有postgres用户没有密码:

psql -d db_name -f dump.sql

我尝试了许多不同的解决方案来恢复postgres备份。我在MacOS上遇到了被拒绝许可的问题,似乎没有解决方案。

下面是我如何做到的:

Postgres附带Pgadmin4。如果你使用macOS,你可以按CMD+SPACE,然后输入pgadmin4来运行它。这将在chrome中打开一个浏览器选项卡。

如果在让pgadmin4工作时遇到错误,请在终端中尝试killall pgAdmin4,然后再试一次。


获取pgadmin4 +备份/恢复的步骤

1. 创建备份

通过右键单击数据库-> "backup"来完成此操作

enter image description here

2. 为文件指定一个名称。

像# EYZ0。点击备份。这将创建一个二进制文件转储,它不是.sql格式

enter image description here

3.查看下载位置

在屏幕的右下角应该会有一个弹出窗口。点击“更多详细信息”页面查看备份文件下载到的位置

enter image description here

4. 找到下载文件的位置

在本例中,它是/users/vincenttang

enter image description here

5. 从pgadmin恢复备份

假设您正确地执行了第1到4步,您将得到一个恢复二进制文件。您的同事可能会在他们的本地机器上使用您的恢复文件。有人说到pgadmin并恢复吗

通过右键单击数据库-> "restore"来完成此操作

enter image description here

6. 选择文件查找器

确保手动选择文件位置,不要将文件拖放到pgadmin的上传字段中。因为您将遇到错误权限。相反,找到你刚刚创建的文件:

enter image description here

7. 查找该文件

你可能需要将右下角的过滤器改为“所有文件”。从第4步开始查找该文件。现在点击右下角的“选择”按钮确认

enter image description here

8. 恢复该文件

您将再次看到这个页面,文件的位置已被选中。继续并恢复它

enter image description here

9. 成功

如果一切正常,右下角应该弹出一个指示符,显示恢复成功。您可以导航到您的表,以查看每个表上的数据是否已被恢复。

10. 如果不成功:

如果第9步失败,请尝试删除数据库中的旧公共模式。转到“查询工具”

enter image description here

执行以下代码块:

DROP SCHEMA public CASCADE; CREATE SCHEMA public;

enter image description here

现在再尝试第5步到第9步,应该没问题

总结

这就是我如何备份/恢复我在Postgres上的备份,当我有错误的权限问题,不能作为超级用户登录时。或者使用chmod为文件夹设置读写凭据。此工作流适用于pgadmin默认为“Custom”的二进制文件转储。我假设.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;"

请遵循以下步骤:

  1. 进入psql shell
  2. # EYZ0
  3. # EYZ0[如:c: / db_name.pgsql]

Postgresql12

from SQL file: 数据库<file.sql < / p >

自定义格式文件: pg_restore -Fc数据库<file.dump < / p >

我有超过100MB的数据,因此我无法使用Pgadmin4恢复数据库。

我使用简单的postgres客户端,并写入下面的命令。

postgres@khan: / $ # EYZ0

它工作得很好,花了几秒钟。你可以看到下面的链接以获取更多信息。 # EYZ0 < / p >

如果你正在使用一个扩展名为.dump的文件,请使用:

# EYZ0

我用了这个

psql -d dbName -U username -f /home/sample.sql