【问题标题】:Moving a database with pg_dump and psql -U postgres db_name < ... results in "ERROR: relation "table_name" does not exist"使用 pg_dump 和 psql -U postgres db_name < ... 移动数据库会导致“错误:关系“table_name”不存在”
【发布时间】:2011-03-31 21:35:20
【问题描述】:

我使用

将我的 PostgresQL 数据库从一个硬盘驱动器移动到另一个硬盘驱动器
pg_dump -U postgres db_name > db_name.dump

然后

psql -U postgres db_name < db_name.dump

我在两个实例中都以相同的方式创建了数据库 db_name。在新数据库中,当我使用 JPA 查询(或 JDBC 查询)运行我的 Java 程序时,我收到此错误:

"ERROR: relation "table1" does not exist"

查询是:

select count(0) from table1

我知道我已经建立了连接,因为如果我更改连接参数中的密码,我会收到错误消息。

由于某些原因,在新的 PostgresQL 实例中,它认为 table1 在导入的架构中不存在。

如果我将查询更改为

从 myschema.table1 中选择 count(0)

然后它抱怨权限:

"ERROR: permission denied for schema myschema"

为什么权限会不同?

表 table1 存在于 myschema 中,因为我可以在 pgAdmin 工具中看到它。所有的行都被导入到新的 PostgresQL 实例中。

当我从 Java 执行查询时,pg_dump 和 psql 的组合产生了问题。

我需要做什么来解决这个问题?

提前致谢。

【问题讨论】:

    标签: postgresql jpa jdbc


    【解决方案1】:

    您要迁移到相同版本的 PostgreSQL 吗?如果您使用 pg_dump 8.3 进行转储并尝试在 Postgresql 8.4 中恢复它,可能会出现问题。无论如何,假设它是相同的版本,请尝试以下操作:

    转储所有全局对象,例如用户和组(不知道它们是否在您的转储中丢失):

    pg_dumpall -g -U postgres > globals.sql
    

    转储数据库架构:

    pg_dump -Fp -s -v -f db-schema.sql -U postgres dbname
    

    转储数据库内容:

    pg_dump -Fc -v -f full.dump -U postgres dbname
    

    现在恢复。

    psql -f globals.sql
    psql -f db-schema.sql dbname
    pg_restore -a -d dbname -Fc full.dump
    

    这是我的 0.02 美元。希望对您有所帮助。

    【讨论】:

    • 我正在从 8.3 迁移到 8.4。我将更改我的备份脚本以使用您更全面的方法。感谢您的回复。
    • 我会为大型数据库添加详细标志(-v)到 pg_restore。 pg_restore -a -v -d dbname -Fc full.dump
    • 如果你还是要去pg_restore -a,那么转储模式两次(明文和压缩)有什么意义?例如,为什么不pg_dump -Fc -a -v -f data.dump?或者完全跳过架构步骤,只在一个步骤中执行全局变量,在另一个步骤中执行其他所有操作?
    • 在恢复块的第二行,我假设文件名应该是'db-schema.sql'?
    • 迄今为止的最佳答案,在恢复我的数据库时面临许多问题,但答案不完整。
    【解决方案2】:

    我遇到了这个问题。然后我意识到我忘了安装postgis 扩展。

    别忘了安装你使用的扩展。

    【讨论】:

    • 非常感谢伙计。这是我挣扎了好几个小时的问题。甚至不知道 postgis 的存在,我是 postgre 世界的新手。刚刚从 repo 安装了 postgis,一切正常。
    【解决方案3】:

    我能够通过将数据库权限更改为公共 CONNECT 以及公共和 postgres = USAGE 和 CREATE 的架构权限来解决这个问题。

    我的备份脚本显然没有保留权限,至少在从 8.3 迁移到 8.4 时没有。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-03
      • 2012-01-13
      • 2020-09-03
      • 2022-01-24
      • 2020-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多