将SQL转储导入PostgreSQL数据库

Import SQL dump into PostgreSQL database

我们正在切换主机,旧的主机提供了我们站点的PostgreSQL数据库的SQL转储。

现在,我正尝试在本地wamp服务器上设置这个来测试它。

唯一的问题是我不知道如何在我设置的PostgreSQL 9中导入这个数据库。

我尝试了pgadminIII,但似乎找不到"import"函数。所以我刚刚打开了SQL编辑器,将转储的内容粘贴到那里并执行它,它创建了表,但是当它试图将数据放入其中时,它总是出错。

1
2
3
4
5
6
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 ...

我还尝试使用命令提示符执行此操作,但找不到所需的命令。

如果我这样做

1
psql mydatabase < C:/DATABASE/db-backup.sql;

我得到错误

1
2
3
ERROR:  syntax error at OR near"psql"
LINE 1: psql mydatabase < C:/DATABASE/db-backu...
        ^

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


1
psql databasename < data_base_dump

这就是你要找的命令。

注意:导入前必须创建databasename。看看PostgreSQL文档第23章。备份和还原。


这是你要找的命令。

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


我相信您希望在psql中运行:

1
\i C:/DATABASE/db-backup.sql


这对我很有用:

1
sudo -u postgres psql db_name < 'file_path'


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

1
\i 'path/to/file.sql'

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


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

1
psql -h localhost -U USER -W -d database_name -f path/TO/file.sql


只是为了好玩,如果你的垃圾被压缩了,你可以做一些类似的事情

gunzip -c filename.gz | psql dbname

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


我使用:

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

希望这能帮助别人。


您可以在pgadmin3中执行此操作。删除转储包含的架构。然后右键单击数据库并选择"还原"。然后您可以浏览转储文件。


我注意到,很多本地主机的例子都过于复杂,在很多情况下,只有postgres用户没有密码:

1
psql -d db_name -f dump.sql