我使用以下方法将我的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在导入的模式中不存在。
如果我将查询更改为
select count(0) from myschema.table1
然后它会抱怨权限问题:
"ERROR: permission denied for schema myschema"
权限为什么会不同?
表table1存在于myschema中,因为我在pgAdmin工具中可以看到它。所有行都被导入到新的PostgresQL实例中。
当我从Java执行查询时,pg_dump和psql的组合就出现了问题。
我需要做什么来解决这个问题?
pg_restore -a -v -d dbname -Fc full.dump
- green0rangepg_restore -a
,那么为什么要将模式以明文和压缩的形式都转储一遍呢?为什么不使用pg_dump -Fc -a -v -f data.dump
呢?或者干脆跳过模式步骤,分别在两个步骤中处理全局变量和其他所有内容呢? - Air