首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用pg_dump和psql -U postgres db_name移动数据库.导致"ERROR: relation "table_name“不存在”

使用pg_dump和psql -U postgres db_name移动数据库.导致"ERROR: relation "table_name“不存在”
EN

Stack Overflow用户
提问于 2010-08-19 10:11:27
回答 3查看 30.8K关注 0票数 25

我使用以下命令将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中选择计数(0)

然后它会抱怨权限问题:

"ERROR: permission denied for schema myschema"

为什么权限会有所不同?

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

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

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

提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-08-19 13:26:47

您是否要迁移到相同版本的PostgreSQL?如果您使用PostgreSQL8.3进行转储并尝试在pg_dump 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美元。希望能有所帮助。

票数 44
EN

Stack Overflow用户

发布于 2016-11-07 19:48:55

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

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

票数 5
EN

Stack Overflow用户

发布于 2010-08-22 00:45:05

我可以通过将数据库权限更改为public CONNECT以及public和postgres = USAGE和CREATE的模式权限来解决此问题。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3518218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档