13

RedHat で PostgreSQL 9.0.3 を使用しています。publicデータベースには、との 2 つのスキーマが含まれていますwh。という新しいロールを作成しましたdjango。このユーザーにwhスキーマをデフォルトとして使用してもらいたい。

マニュアルに従って、次のことを行いました。

ALTER USER django SET SEARCH_PATH TO wh, public;

これはうまくいくようです:

SHOW SEARCH_PATH;
search_path 
-------------
wh, public

ただし、次に を実行する\dtと、パブリック スキーマのテーブルのみが表示されます。マニュアルでは、検索パスを変更するとすぐに効果があり、プレフィックスなしでテーブルにアクセスできるはずですがwh、そうではありません。ログインおよびログアウトすると、変更は保持されますがsearch_path、動作の変更は表示されません。

私は何が欠けていますか?

4

5 に答える 5

15

GRANTあなたの問題を解決するかもしれません:

GRANT USAGE ON SCHEMA wh TO django;

(またはGRANT USAGE ...、(直接的または間接的な) メンバーとして django を持つ任意のロールに。)
(またはGRANT ALL ...、それが必要な場合。)

を設定するsearch_pathと、リストされたスキーマでオブジェクトを検索するよう Postgres に指示します。そこにあるものを見る許可を与えるわけではありません。「django」が必要な権限を持っていない場合は、\dtその情報を表示してはなりません (そして表示しません)。

一方、すでにスーパーユーザーとして試したことがある場合(前の提案に対するコメントによると)、これはそうではないかもしれません...

于 2011-09-14T00:18:23.700 に答える
1

Windows 64ビットの9.1(リリースのみ)でテストしたところ、指定どおりに機能しました。

マンページからの抜粋ALTER ROLE

残りのバリアントは、すべてのデータベースに対して、またはIN DATABASE句が指定されている場合は、指定されたデータベース内のセッションに対してのみ、構成変数の役割のセッションのデフォルトを変更します。その後、ロールが新しいセッションを開始するたびに、指定された値がセッションのデフォルトになり、postgresql.confに存在する設定、またはpostgresコマンドラインから受信した設定が上書きされます。これはログイン時にのみ発生します; SETROLEまたはSETSESSIONAUTHORIZATIONを実行しても、新しい構成値は設定されません。

強調鉱山

于 2011-09-13T22:04:51.810 に答える
0

これは、コマンドの制限である可能性があります\dt

search_path が適切に機能していることを確認するには、wh スキーマにあるSELECT * FROM some_tablewhere some_tableis one を実行してみてください。

于 2011-09-13T20:28:54.973 に答える
0

PostgreSQL の場合、ユーザーがデータベースに接続してテーブルなどのオブジェクトを探す場合、最初にユーザー名と同じ名前のスキーマを探し、見つからない場合はパブリック スキーマを探します。 django ユーザーを介してデータベースに接続すると、デフォルトでスキーマ django が検索されますが、現在のスキーマは Wh にしたいので、スキーマ名とロール名を同じにしてから、ロールとしてデータベースにログインすると問題が解決します、接頭辞を入力せずに、試してみてください!

于 2011-09-14T08:47:24.167 に答える