0

これが発生し始めた正確な時点はわかりません (初めて pgadmin3 を起動した後だった可能性があります)。基本的に、これは突然発生したようで、すべてが正しく構成されているようです..

PostgreSQL は、テーブルを見つけるために search_path に従わなくなったようです。

\d
No relations found.

私の検索パスが設定されました(それで永続的に):

SHOW search_path;
"public, myschema1, myschema2"
(1 row)

私は問題のテーブルの所有者であるだけでなく、以下を実行しました:

GRANT ALL ON SCHEMA public to myusername;
GRANT ALL ON SCHEMA myschema1 to myusername;
GRANT ALL ON SCHEMA myschema2 to myusername;

データはすべてそこにあります。\dn を実行するとスキーマが表示されます。スキーマ名とテーブル名を完全に修飾すれば、クエリを実行することもできます。最大の問題は、修飾されていないテーブル名を参照する既に作成された関数が機能しないことです。

私が試していないかもしれない何かを誰かが考えることができますか? この問題が発生し始めた原因について何か考えはありますか?

助けてくれてありがとう!-ハイテク

4

2 に答える 2

1

おそらく、search_path を 1 つの文字列として入力した可能性があります

postgres=# set search_path を public, s1;
設定
postgres=# show search_path ;
 検索パス
-------------
 公開、s1
(1行)

postgres=# set search_path を 'public, s1';
設定
postgres=# show search_path ;
 検索パス  
--------------
 「公開、s1」
(1行)

2 番目の設定が間違っていて、機能しません。

于 2013-07-31T19:38:31.970 に答える
0

そのユーザーUSAGE ON SCHEMAをGRANTし、そのスキーマにOWNERとしてログオンすることで、同様の問題を修正しました。開発させてください:

ユーザー ストーリー: Postgres 9.6 でこの奇妙な動作を再現できました。以下のコンソール出力を参照してください。それはどれほど奇妙でしたか?私はできましたが\dt preprod.users\dt何も発行しません! これらのテーブルで SELECT を実行することもできましたが、これには本当に混乱しました。

(search_path では、コンマの後のスペースに注意してください。PostgreSQL によって自動的に調整されます)

do_preprod=> -- I'm logged on as preprod_www_ro, a read-only user who belongs to readonly ROLE.
do_preprod=> SET search_path TO preprod,public;
SET
do_preprod=> SHOW search_path;
   search_path
-----------------
 preprod, public
(1 row)
do_preprod=> \dt
Did not find any relations.
do_preprod=> \dt users;
Did not find any relation named "users".
do_preprod=> \dt preprod.users;
           List of relations
 Schema  | Name  | Type  |    Owner
---------+-------+-------+-------------
 preprod | users | table | preprod_www
(1 row)

次に、preprod_www(= スキーマ所有者) としてログオンし、readonlyROLE (preprod_www_roの)USAGE権限を付与しました。do_preprod=> GRANT USAGE ON SCHEMA preprod TO readonly;

その後、 に戻るとpreprod_www_ro、 との関係をすぐに確認でき、ログアウトせずに を\dt存分に楽しむことができました。search_path

\dt, orを発行するとき、そもそも PostgreSQL からのより明確なメッセージが欲しかったでしょう\dt preprod.users: 「スキーマに USAGE が付与されていません...」など、実際にはユーザーがそれを使用できたので... しかし、完全にスムーズではありませんでした。

于 2019-09-04T03:16:01.093 に答える