将SQL转储导入PostgreSQL数据库


450

我们正在交换主机,而旧主机提供了我们站点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脚本前面的语句失败了。查看导入的完整输出以找到它。
owensmartin

Answers:


730
psql databasename < data_base_dump

这就是您要查找的命令。

当心:databasename必须在导入之前创建。看一下PostgreSQL Docs第23章备份和还原


1
我已经尝试过psql mydatabase <C:\ database \ db-backup.sql,但是却收到错误命令Invalid \ database。我也尝试过使用“”。
dazz

23
@Dazz您必须在命令提示符(开始->运行-> cmd)而不是postgres提示符中执行此命令。
雅各布

2
如果我从cmd运行它,则会得到“'<'运算符保留供将来使用。”
dazz,2011年

3
@Dazz:您也可以使用-fswitch(或--file
Grzegorz Szpetkowski

47
psql --username = postgres数据库名<data_base_dump.sql
Maxence


114

我相信您想在psql中运行:

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

由于Emacs的eshell不支持输入重定向,因此不得不使用它。谢谢。
2013年

3
确保首先使用\ c <database_name>更改为数据库
hkong


49

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

\i 'path/to/file.sql'

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


1
此解决方案为我工作,而投票最多的解决方案产生“ stdin不是tty”错误。
1616年

正是我想要的-一种psql从命令行内部执行脚本的方法。谢谢!
vatsug

只是想谢谢你。应该包含在正确答案中。
PKHunter '17

这是正确的,请不要在Windows的路径中使用反斜杠!
Erdinc Ay

同样对于Windows,您需要双斜杠
CMAS

44

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

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

22

只是为了好玩,如果压缩转储,您可以执行以下操作

gunzip -c filename.gz | psql dbname

正如Jacob提到的那样,PostgreSQL文档对所有这些都做了很好的描述。



4

您可以在pgadmin3中做到这一点。删除转储中包含的架构。然后右键单击数据库,然后选择“还原”。然后,您可以浏览转储文件。


2
但是,即使选择了.sql文件,“还原”按钮也无法单击。该软件似乎需要其他类型的文件-一个带有* .backup格式的文件。单击该导入框上的“帮助”是指pg_restore-“ ...一种用于从pg_dump创建的非明文格式之一的存档中恢复PostgreSQL数据库的实用程序。” OP引用的sql文件是纯文本格式。
JosephK

3

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

psql -d db_name -f dump.sql

3

确保已创建要导入到的数据库,然后可以使用以下命令导入转储

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;"

2

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

这是我如何使其工作的方法:

Postgres带有Pgadmin4。如果您使用macOS,则可以按CMD+ SPACE并键入pgadmin4以运行它。这将在Chrome中打开一个浏览器标签。

如果在使pgadmin4正常工作时遇到错误,请killall pgAdmin4在终端中尝试,然后重试。


获取pgadmin4 +备份/还原的步骤

1.创建备份

通过右键单击数据库->“备份”来执行此操作

在此处输入图片说明

2.给文件起一个名字。

喜欢test12345。单击备份。这将创建一个二进制文件转储,它不是.sql格式

在此处输入图片说明

3.查看下载位置

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

在此处输入图片说明

4.查找下载文件的位置

在这种情况下 /users/vincenttang

在此处输入图片说明

5.从pgadmin恢复备份

假设您正确执行了步骤1到步骤4,您将拥有一个还原二进制文件。有时您的同事希望在其本地计算机上使用您的还原文件。说过该人去pgadmin并恢复

通过右键单击数据库->“还原”来执行此操作

在此处输入图片说明

6.选择文件查找器

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

在此处输入图片说明

7.找到所说的文件

您可能必须将右下角的过滤器更改为“所有文件”。此后,从第4步中查找文件。现在点击右下角的“选择”按钮以确认

在此处输入图片说明

8.恢复所说的文件

您将再次看到此页面,其中包含选定文件的位置。继续还原它

在此处输入图片说明

9.成功

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

10.如果不成功:

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

在此处输入图片说明

执行以下代码块:

DROP SCHEMA public CASCADE; CREATE SCHEMA public;

在此处输入图片说明

现在再次尝试步骤5到9,应该可以解决

摘要

当我遇到错误权限问题并且无法以超级用户身份登录时,这就是我必须在Postgres上备份/还原备份的方式。或为chmod用于文件夹的读/写设置凭据。此工作流适用于pgadmin中默认为“自定义”的二进制文件转储。我认为.sql是相同的方式,但我尚未测试

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.