0

このコマンドを使用して、postgresql データベースを Linux から Windows にコピーします。

pg_dump -C -h toolbox.mydomain.com -U postgres 認証 | psql -h localhost -U postgres 認証

データソースで Windows バージョンの Postgresql を使用し、1 対多の関係の子エンティティ (所有側) で 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 データベースをデータソースに指定しても問題はありません。私が知る限り、資格情報は 2 つのデータソースで同じであり、2 つの Postgresql インスタンスのスキーマは同じ権限を持っています。

私は何が欠けていますか?このようなパイプを介してデータベースをダンプする際に微妙な問題がありますか? UNIX対Windowsの問題でしょうか?

提案をありがとう。

4

1 に答える 1

2

ロール (ユーザーとグループ) は PostgreSQL のグローバル オブジェクトです。pg_dump必ずしもロールを作成するとは限りません。-1エラーが発生しても失敗しないように、復元側を実行していないことに注意してください。発生している可能性が非常に高いのは、一部の予期されGRANTたステートメントが失敗しているにもかかわらず、エラーに気付いていないということです。

復元時のサーバー ログを調べるか、再実行して、ON_ERROR_STOP=1 psql -1 ....問題が発生した場合に失敗することを確認します。

個人的には、復元動作やエラー処理などをより詳細に制御できるため、pg_dump -Fc使用することを好みます。pg_restore

ロールなどのグローバル オブジェクトをダンプするには、 を使用しますpg_dumpall --globals-only

于 2012-06-22T10:03:39.450 に答える