0

我用这个命令将一个 postgresql 数据库从 Linux 复制到 Windows

pg_dump -C -h toolbox.mydomain.com -U postgres auth | psql -h localhost -U postgres 验证

当我让数据源使用 Windows 版本的 Postgresql 并在一对多关系的子实体(拥有方)上执行 Hibernate 合并时,我从 Postgresql 收到权限错误:

2012-06-21 14:39:42 MDT ERROR:  permission denied for schema stage at character 20
2012-06-21 14:39:42 MDT QUERY:  SELECT 1 FROM ONLY "stage"."job" x WHERE "id" OPERATOR(pg_catalog.=) $1 FOR SHARE OF x
2012-06-21 14:39:42 MDT STATEMENT:  insert into stage.file (job_id, name) values ($1, $2) RETURNING *

如果我将数据源指向 Linux 服务器上的 Postgres 数据库,则没有问题。据我所知,两个数据源的凭据相同,并且两个 Postgresql 实例上的模式具有相同的权限。

我错过了什么?在这样的管道上转储数据库是否存在一些微妙的问题?也许是 UNIX 与 Windows 的问题?

感谢您的任何建议。

4

1 回答 1

2

角色(用户和组)是 PostgreSQL 中的全局对象。pg_dump不一定会为您创建角色。我注意到你正在做恢复方面没有-1所以如果有错误它不会失败。很可能正在发生的事情是一些预期GRANT的语句失败,但您没有注意到错误。

从恢复时检查服务器日志,或重新运行它ON_ERROR_STOP=1 psql -1 ....以确保在出现任何问题时它会失败。

就我个人而言,我更喜欢使用它们pg_dump -Fcpg_restore因为它们让我可以更好地控制恢复行为、错误处理等。

要转储像角色这样的全局对象,请使用pg_dumpall --globals-only.

于 2012-06-22T10:03:39.450 回答