[pgsql-jp: 41961] Re: pg_restoreについて

TAKATSUKA Haruka harukat @ postgresql.jp
2017年 9月 11日 (月) 09:47:50 JST


高塚です。

確かに下記の振る舞いが起こりますね。

pubicスキーマから、誰でも利用可能とする「=UC」の権限指定が消えてしまいます。

db1=# SELECT * FROM pg_namespace ;
      nspname       | nspowner |               nspacl
--------------------+----------+------------------------------------
 pg_toast           |       10 |
 pg_temp_1          |       10 |
 pg_toast_temp_1    |       10 |
 pg_catalog         |       10 | {postgres=UC/postgres,=U/postgres}
 information_schema |       10 | {postgres=UC/postgres,=U/postgres}
 public             |       10 |
(6 rows)

こうなっていないといけません。

 public             |       10 | {postgres=UC/postgres,=UC/postgres}

とりあえず GRANT ALL ON SCHEMA public TO public;
で復旧できるはずです。

以下の手順だと、元からある public スキーマについて、
 DROP SCHEMA IF EXISTS public;
 CREATE SCHEMA public;
を行うけれども、GRANT が行われません。

バグであろうかと考えられます。


On Sat, 9 Sep 2017 17:38:47 +0900
TAKATSUKA Haruka <harukat @ postgresql.jp> wrote:

> On Sat, 9 Sep 2017 08:14:40 +0900
> sato <y_sato_priv @ yahoo.co.jp> wrote:
> 
> > はじめまして。サトウと申します。
> > 駄文・長文ご容赦ください。
> > 
> > pg_dumpで作成したダンプをリストアする
> > ということを行っております。
> > やっていることは、postgresでダンプ、リストアを実行し
> > postgres以外のユーザ(非スーパーユーザ)でそのDBを使用する
> > ということなのですが、その際に以下のような現象が発生し困っております。
> > 
> > OS:Windows7
> > PostgreSQL-9.6.3
> > 
> > 1.createuser -U postgres user1 でuser1を作成(後ほどpassは設定)
> > 2.psql -U postgres でPostgreSQLにアクセス
> > 3.create databaseでDB作成
> > 4.create tableでtableを作成
> > 5.alter databaseでDBの所有者をuser1に変更
> > 
> > この状態でpsql -U user1 
> > databaseとすると、user1でも問題なくDBにアクセスできました。
> > 
> > ここで
> > pg_dump -v -Fc -U postgres -f TEST.dump databaseとし
> > pg_restore -v -e -c --if-exists -Fc -U postgres -d database TEST.dumpとして
> > リストアした後にuser1でアクセスすると、リレーションがありませんとなってしまいます。
> > postgresでアクセスするときちんとテーブルが表示され操作もできます。
> > user1にもすべてのアクセス権をつけて試しましたがリレーションがありませんから変わりませんでした。
> > 
> > pg_restoreの際に-C(--create)オプションをつけた場合はこの現象は起こりませんでした。
> > 
> > \dtや\lで確認した限りでは設定に差異は見つけられず、
> > ネットでスキーマの設定の問題かもとありましたが、
> > publicスキーマで生成されており、search_pathの設定も
> > public, "$user"にして試しましたが変化ありませんでした。
> > 
> > リストアに失敗してしまった場合に元あるDBを消したくないためCオプションは使いたくないと思っております。
> > 
> > なぜこのような現象が発生するかが見当がつかず詰まっています。
> > もし解決作をご存知の方がいらっしゃれば、ご教授をお願い致します。
> > 





pgsql-jp メーリングリストの案内