1

特定の一連のプロセスからのすべてのクエリがプライベート ビューを通過する一方で、他の (潜在的に同時または単に後続の) プロセスが残るように、基本的な基本的な postgres データベースがインスタンス ローカライズされたプライベート ビューで覆われているテスト環境を作成したいと考えています。影響を受けません。

search_pathメカニズムを使用してこのようなことができると思いますが、それが透過的にできるかどうかは明らかではありません (たとえば、各アプリケーションが接続ごとに SQL セットアップのセットを実行する必要はありません)。たとえば、「このsearch_pathを使用する」という環境変数として設定し、その後開始するすべてのプロセスにそれを見て同じプライベートテーブルインスタンスを使用させることができるものはありますか?

問題がある場合、プロセスはすべて C++ アダプター libpqxx を経由してデータベースにアクセスします。

ありがとう、ジェフ

4

2 に答える 2

0

すべてのインスタンスに個別のデータベース ユーザー ロールがある場合は、ユーザーと同じ名前のスキーマを作成するだけで、構成を変更せずにそれを使用できます。

myuser=> show search_path;
 search_path   
--------------
"$user",public
(1 row)

myuser=> create schema myuser;
CREATE SCHEMA
myuser=> create table foo(i int);
CREATE TABLE
myuser=> \d foo
   Table "myuser.foo"
Column  Type   Modifiers 
------ ------- ---------
i      integer 

ユーザーとスキーマに異なる名前を付けたい場合は、ユーザーごとに手動で構成できます。

ALTER USER foo SET search_path=foo_schema;
于 2011-03-18T22:02:35.240 に答える
0

postgre 構成ファイルで、すべての接続のデフォルトの検索パスを構成できます。

http://www.postgresql.org/docs/9.0/static/runtime-config-client.html#RUNTIME-CONFIG-CLIENT-OTHERを参照してください。

各接続にユーザーが誰であるかに基づいたカスタム検索パスが必要な場合は、コードでそれを行い、SET search_path TO x,y,z;接続ごとに を発行する必要があります。

頭に浮かぶ別のオプションは、ストアド関数を使用し、動的SQLを使用して、呼び出し元に基づいてさまざまなスキーマからクエリを実行することです。テーブルを維持するか、ストアド関数が使用するストアド関数へのユーザー/スキーママッピングの2つの「ハードコード」のうち、より悪いものを維持する必要があります。

于 2011-03-18T18:41:59.143 に答える