我有一个基于ASP.NET 3.5和PostgreSQL 8.3构建的应用程序。我的数据库有3个用户,一个数据所有者(xxx-owner),一个数据编辑器(xxx-editor)和一个数据查看器(xxx-viewer)。每个用户都有自己的架构,称为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
答案 0 :(得分:3)
您可以使用以下方式在每个会话的基础上设置架构搜索路径:
SET search_path TO myschema
如果您想回退到公共架构,可以使用:
SET search_path TO myschema, public
答案 1 :(得分:0)
你也可以这样做:
SET SCHEMA' myschema';
此声明与SET search_path TO myschema, public
但更多