gpt4 book ai didi

asp.net - 使用 PostgreSQL 时,我应该在哪里(或如何)在 select 语句中定义模式?

转载 作者:行者123 更新时间:2023-11-29 14:24:44 24 4
gpt4 key购买 nike

我有一个基于 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 - Changes search path to specified and public schemas.

根据我有限的测试,它在我的情况下工作正常。但是,这是一个仅限 PostgreSQL 的解决方案。是否有更多与数据库无关的解决方案,大多数数据库是否提供此类功能?


编辑 2

我在下面标记了答案,这使我可以在数据库级别更改模式查找顺序。通过以下更改,我不需要在我的 SQL 语句中添加代码。

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

最佳答案

您可以使用以下方法在每个 session 的基础上设置模式搜索路径:

SET search_path TO myschema

如果你想回退到公共(public)模式,你可以使用:

SET search_path TO myschema, public

关于asp.net - 使用 PostgreSQL 时,我应该在哪里(或如何)在 select 语句中定义模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/651527/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com