У меня есть приложение, построенное на 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