【问题标题】:Access a postgres table using the schema prefix in c#使用 c# 中的模式前缀访问 postgres 表
【发布时间】:2021-07-15 23:06:25
【问题描述】:

我在一个 c# 项目中使用 postgres,我正在尝试进行一些基本查询,例如

qry.CommandText = "select * from LOGIN";
NpgsqlDataReader qryReader = qry.ExecuteReader();

但它说LOGIN表不存在。

我已经知道以下查询有效:qry.CommandText = "select * from \"myDataBase\".LOGIN";,但我不想使用它。

我也从this thread 知道,我可以使用SET search_path TO myschema,public; 在 psql 命令行中访问不带前缀的表,但我不知道它对我的 c# 项目有什么作用。

另外,我还有一个不需要前缀的项目,但我不知道为什么它适用于我的另一个项目而不是这个。

任何帮助将不胜感激。

谢谢

【问题讨论】:

    标签: c# postgresql npgsql search-path


    【解决方案1】:

    虽然SET search_path TO myschema,public; 仅为当前会话设置search_path,但您可以将其永久设置为运行命令的用户:

    ALTER USER username SET search_path TO myschema, public;

    【讨论】:

    • 我接受这个答案,因为这可以解决问题,但是当每个用户有多个模式时会有解决方案吗?还是这是不好的做法?
    • 您可以添加多个架构 (ALTER USER username SET search_path TO myschema,myschema2,myschema3, public;)。如果要对所有用户都这样做,可以在数据库级别设置搜索路径(alter database mydb set search_path = "$user", myschema, public ;
    猜你喜欢
    • 2014-12-30
    • 2018-06-03
    • 2017-08-19
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多