我的目标是将.sql转储从我的服务器导入project_devel数据库。我遇到了一个令人沮丧的问题,当我从.sql文件加载数据时,似乎忽略了-d [databasename]选项。相反(正如您可以看到输出中的12行),。sql文件可能会告诉导入器导入另一个数据库。有关为什么会发生这种情况以及如何强制数据进入我用-d指定的数据库的任何线索?
我最后通过将database.yml中的开发数据库名称更改为project_prod来设置创可贴,因为我的目标只是在本地加载生产数据并调试一些东西。
我用来导入的命令:
YeastFlakes:newproject new$ psql -h /tmp -d project_devel -f prod_dump_2013-02-07_09-00.sql
输出:
You are now connected to database "postgres" as user "new".
SET
SET
SET
psql:prod_dump_2013-02-07_09-00.sql:15: ERROR: role "project" already exists
ALTER ROLE
psql:prod_dump_2013-02-07_09-00.sql:17: ERROR: role "postgres" already exists
ALTER ROLE
psql:prod_dump_2013-02-07_09-00.sql:19: ERROR: role "replication" already exists
ALTER ROLE
psql:prod_dump_2013-02-07_09-00.sql:31: ERROR: database "project_prod" already exists
REVOKE
REVOKE
GRANT
GRANT
You are now connected to database "project_prod" as user "new".
SET
SET
SET
SET
SET
SET
CREATE EXTENSION
COMMENT
SET
SET
SET
psql:prod_dump_2013-02-07_09-00.sql:85: ERROR: relation "active_admin_comments" already exists
ALTER TABLE
psql:prod_dump_2013-02-07_09-00.sql:99: ERROR: relation "active_admin_comments_id_seq" already exists
输出会持续一段时间......
答案 0 :(得分:4)
PostgreSQL documentation似乎采用了一种非常简单的SQL转储/恢复方法;
Dump:
$ pg_dump dbname > outfile
Restore:
$ psql dbname < infile
不使用该方法的任何特殊原因?
答案 1 :(得分:0)
在输出的顶部相当清楚地说:
You are now connected to database "postgres" as user "new".
...
You are now connected to database "project_prod" as user "new".
如果你查看备份的前20行,我不认为你看到任何看起来像“连接”命令的东西?可能将数据库“postgresql”作为用户“new”,然后再将另一个数据库“project_prod”再次作为用户“new”?
哦 - 如果你不打算真正查看文件,那么作为原始SQL进行转储是没有意义的。也可以使用压缩的“自定义”格式,并为您提供使用pg_restore恢复单个/所选元素的选项。有关详细信息,请参阅详尽的手册。