Где (или как) я должен определить схему в операторе выбора при использовании PostgreSQL? - PullRequest
0 голосов
/ 16 марта 2009

У меня есть приложение, построенное на ASP.NET 3.5 и PostgreSQL 8.3. В моей базе данных 3 пользователя, владелец данных (xxx-owner), редактор данных (xxx-editor) и средство просмотра данных (xxx-viewer). Каждый пользователь имеет свою собственную схему под названием xxx-schema, xxx-editor-schema и xxx-viewer-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?


EDIT

Следующее из Руководства пользователя PostgreSQL выглядит многообещающе.

SearchPath - изменяет путь поиска для указанных и общедоступных схем.

Из моего ограниченного тестирования в моей ситуации все работает нормально. Однако это решение только для PostgreSQL. Возможно, существует более независимое от базы данных решение, предоставляют ли большинство баз данных такую ​​функциональность?


РЕДАКТИРОВАТЬ 2

Я отметил ответ ниже, что привело меня к изменению порядка поиска схемы на уровне базы данных. Со следующим изменением мне не нужно добавлять код в мои операторы SQL.

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

Ответы [ 2 ]

3 голосов
/ 16 марта 2009

Вы можете установить путь поиска схемы для каждой сессии, используя:

SET search_path TO myschema

Если вы хотите вернуться к публичной схеме, вы можете использовать:

SET search_path TO myschema, public
0 голосов
/ 13 марта 2014

Вы также можете сделать:

SET SCHEMA 'myschema';

Это утверждение то же, что SET search_path TO myschema, public, но больше

...