0

ASP.NET 3.5 と PostgreSQL 8.3 で構築されたアプリケーションがあります。私のデータベースには、データ所有者 (xxx-owner)、データ編集者 (xxx-editor)、およびデータ閲覧者 (xxx-viewer) の 3 人のユーザーがいます。各ユーザーには、xxx-schema、xxx-editor-schema、および xxx-viewer-schema と呼ばれる独自のスキーマがあります。すべてのデータは xxx-schema に保存されます。

これには、次のスニペットに示すように、xxx-editor または xxx-viewer ユーザーとしてデータベースに接続するときにスキーマを指定する必要があります。

NpgsqlCommand pgCommand = new NpgsqlCommand();
pgCommand.CommandText = @"SELECT 
                        bldg_id,
                        bldg_name,
                        bldg_no,
                        FROM " + this.schema + @".buildings
                        WHERE UPPER(bldg_id) LIKE UPPER(@id);";

pgCommand.Parameters.Add("@id", "%" + id + "%");
pgCommand.Connection = pgConnection;

このルートに従うとしたら、Web.config でスキーマを指定します。ただし、使用するスキーマを指定するためのより良い方法が必要です。可能であれば、文字列の連結を完全に削除できるようにしたいと考えています。

SQL ステートメントで使用されるスキーマを定義する最良の方法は何ですか?


編集

PostgreSQL User Manualの以下は有望に見えます。

SearchPath - 検索パスを指定されたパブリック スキーマに変更します。

私の限られたテストから、私の状況では問題なく動作します。ただし、これは PostgreSQL のみのソリューションです。おそらくデータベースに依存しないソリューションはありますか?ほとんどのデータベースはそのような機能を提供していますか?


編集2

以下の回答にマークを付けたので、データベース レベルでスキーマの検索順序を変更することになりました。次の変更により、SQL ステートメントにコードを追加する必要がなくなりました。

ALTER USER xxx-viewer SET search_path TO '$user', xxx, public, sde
4

2 に答える 2

3

次を使用して、セッションごとにスキーマ検索パスを設定できます。

SET search_path TO myschema

パブリックスキーマにフォールバックする場合は、次を使用できます。

SET search_path TO myschema, public
于 2009-03-16T19:02:25.350 に答える
0

次のこともできます。

SET SCHEMA 'myschema';

このステートメントはそれと同じですSET search_path TO myschema, publicが、さらに

于 2014-03-12T22:21:28.087 に答える