9

postgresql を使用してアプリケーションを開発しましたが、うまく機能します。

ここで、同じアプリケーションの複数のインスタンスを作成する必要がありますが、データベースは 1 つしかありません。そのため、各インスタンス テーブルを異なるスキーマにグループ化できるように、スキーマを使用することを考えています。

さて、すべての関数とスクリプトを書き直したくはないので、特定のスキーマで動作するようにデータベースに指示するディレクティブを使用できるかどうか疑問に思っています。わかりやすくするために、C ++でいつ行うか知っていますか

using namespace std;

coutの代わりにstd::cout使用できるように できれば似たようなものを使いたいです。

4

1 に答える 1

14

探しているパラメーターはsearch_path、クエリが検索するスキーマをリストするものです。したがって、次のようなことができます。

CREATE TABLE schema1.tt ...
CREATE TABLE schema2.tt ...
CREATE FUNCTION schema1.foo() ...
CREATE FUNCTION schema2.foo() ...
SET search_path = schema1, something_else;
SELECT * FROM tt;        -- schema1.tt
SELECT * FROM schema2.tt -- schema2.tt
SELECT foo();            -- calls schema1.foo
SELECT schema2.foo();    -- calls schema2.foo

クエリのプランが foo() の本体内に保存されると、予期しない結果が生じる可能性があることに注意してください。重複したテーブルを使用している場合は、plpgsql 関数で参照されるテーブルのスキーマを常に明示的にリストすることをお勧めします。そうでない場合は、search_path を変更して動作を確認するためのテストが実施されていることを確認してください。

ああ、関数本体の search_path を明示的に設定することもできます。詳細については、マニュアルの CREATE FUNCTION リファレンスを参照してください。

于 2012-06-15T07:40:41.353 に答える