【问题标题】:Postgresql dump not going to correct database upon importing data导入数据后,Postgresql 转储不会更正数据库
【发布时间】:2013-01-23 08:56:21
【问题描述】:

我的目标是将 .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

输出会持续一段时间......

【问题讨论】:

    标签: ruby-on-rails postgresql amazon-ec2


    【解决方案1】:

    PostgreSQL documentation 似乎采用了一种非常简单的 SQL 转储/恢复方法;

    Dump: 
    
    $ pg_dump dbname > outfile
    
    Restore:
    
    $ psql dbname < infile
    

    有什么理由不使用这种方法吗?

    【讨论】:

    【解决方案2】:

    它在你的输出顶部相当清楚地表明:

    You are now connected to database "postgres" as user "new".
    ...
    You are now connected to database "project_prod" as user "new".
    

    如果您查看备份的前二十行左右,我认为您没有看到任何看起来像“连接”命令的东西?可能以用户“new”的身份访问数据库“postgresql”,然后以用户“new”的身份再次访问数据库“project_prod”?

    哦,如果您不打算真正查看文件内部,那么将其作为原始 SQL 转储是没有意义的。不妨使用压缩的“自定义”格式,并为您提供使用 pg_restore 恢复单个/选定元素的选项。有关详细信息,请参阅广泛而详细的手册。

    【讨论】:

    • 好的,所以在 sql 文件中查看它确实有一些命令可以基本上做它想做的事情,比如创建数据库、以用户身份连接、调用它想要的东西。我是 psql 备份和恢复的新手,所以不知道为什么我发出的命令会被覆盖,但是如果它们直接写入文件中,这将是完全有道理的。感谢您的提示。
    猜你喜欢
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-22
    • 2017-05-06
    相关资源
    最近更新 更多