我使用
将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的组合产生了一个问题。
我需要做些什么来解决这个问题?
提前致谢。
答案 0 :(得分:31)
您是否正在转向相同版本的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美元。希望它有所帮助。
答案 1 :(得分:3)
我遇到了这个问题。然后我意识到我忘了安装postgis
扩展名。
不要忘记安装您使用的扩展程序。
答案 2 :(得分:1)
我能够通过将数据库权限更改为公共CONNECT以及public和postgres的模式权限= USAGE和CREATE来解决它。
我的备份脚本显然没有保留权限,至少在从8.3移动到8.4时没有。