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...
^ |
导入数据库的最佳方法是什么?
- 我犯了一个和你的第一个类似的错误:ERROR: syntax error at or near"t"。结果我只导入了一个部分模式,因此脚本前面的CREATE TABLE语句失败了。查看导入的完整输出以找到它。
1
| psql databasename < data_base_dump |
这就是你要找的命令。
注意:导入前必须创建databasename。看看PostgreSQL文档第23章。备份和还原。
- 我尝试过psqlmydatabase
- 你试过C:database和调用psql mydatabase
- @dazz必须从命令提示符(start->run->cmd)执行此命令,而不是从postgres提示符执行此命令。
- 如果我从cmd运行它,我会得到"the"<"operator is reserved for future use."
- @达兹:你也可以用-f开关(或--file开关)。
- 不可能。您引用的错误来自PowerShell,而不是Windows命令提示符。您在错误的shell中键入命令。
- 是的,PowerShell,但这是可行的。我成功了:psql-f sdb-backup.sql mydatabase;
- 本文档是解决posgres数据库postgresql.org/docs/9.1/static/backup-dump.html"pg_dump dbname>outfile""gunzip-c filename.gz_psql dbname"问题的好参考。
- psql--username=postgres databasename
- Ownerit说对等身份验证失败。即使我输入了正确的密码:(
- 这个解决方案对我很有效,但是只有在我先删除了我的数据库(使用rake db:drop)并创建了它(使用rake db:create)(正如@jacob上面提到的那样)。之后也进行了一次迁移,然后很好就可以走了。
- @用户151496您必须更改当前用户。如果您使用对等身份验证,Postgre将假定您的用户是您的操作系统当前用户。导出pguser env var(将其设置为首选的db用户名)并设置~/.pgpass文件。这应该能解决你的问题。
- 在psql中使用select current_database();查找当前数据库
- 获取这个"输入是一个PostgreSQL自定义格式转储。使用pg_restore命令行客户机将此转储还原到数据库。"
- 如果您要导入一个巨大的转储文件,请不要忘记将该转储文件包装在begin transaction中,并提交以防止psql在每行之后提交。
这是你要找的命令。
1
| psql -h hostname -d databasename -U username -f file.sql |
- 很好,但最好也附加"-l log file.log"参数来记录文件上的输出。
- 获取这个"输入是一个PostgreSQL自定义格式转储。使用pg_restore命令行客户机将此转储还原到数据库。"
我相信您希望在psql中运行:
1
| \i C:/DATABASE/db-backup.sql |
- 必须使用它,因为Emacs的eShell不支持输入重定向。谢谢。
- 请确保首先使用c
- 只有这是正确的,上面所有的都对我不起作用。
- 当您已经在Postgis中时,此命令将起作用。
这对我很有用:
1
| sudo -u postgres psql db_name < 'file_path' |
我不确定这是否适用于OP的情况,但我发现在交互控制台中运行以下命令对我来说是最灵活的解决方案:
只需确保您已经连接到正确的数据库。此命令执行指定文件中的所有SQL命令。
- 这个解决方案对我有效,而投票最多的解决方案产生了"stdin不是tty"错误。
- 我正在寻找一种从psql命令行内部执行脚本的方法。谢谢!
- 只是想感谢你的帮助。应该包括在正确的答案中。
- 这是正确的,不要在Windows路径中使用反斜杠!
- 同样,对于Windows,您需要双正斜杠
工作得很好,在命令行中,所有参数都是必需的,-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中执行此操作。删除转储包含的架构。然后右键单击数据库并选择"还原"。然后您可以浏览转储文件。
- 但即使在选择了.sql文件之后,也不能单击"还原"按钮。这个软件似乎想要其他类型的文件-一个带有*.backup格式的文件。单击导入框上的"帮助"指向pg_restore-"…从pg_dump以非纯文本格式创建的存档中还原PostgreSQL数据库的实用程序。"op引用的SQL文件是纯文本格式。
我注意到,很多本地主机的例子都过于复杂,在很多情况下,只有postgres用户没有密码:
1
| psql -d db_name -f dump.sql |