0

我有一个基于 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 用户手册中的以下内容看起来很有希望。

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 回答