NPOCO中的Postgresql查询

时间:2016-06-29 16:25:31

标签: .net postgresql npgsql npoco

我对NPOCO + PostgreSQL Space很陌生,因为我已经决定暂时离开SQL Server。

我的问题是通常在NPOCO中写这样的查询

   database.Execute("select userId from Users");

在SQL Server世界中一切正常。来到PostGreSQL世界,我被这样看起来有点奇怪的问题所困扰

  SELECT "UserId", from dbo."Users"

现在我很想知道如何在NPOCO中使用PostgreSQL查询,看到列名和表名必须在引号中

提前致谢

1 个答案:

答案 0 :(得分:0)

如果postgres中的列名和表名包含大写或特殊字符,则它们只能用引号括起来。也就是说,默认情况下,postgres SQL解析器将强制所有未加引号的名称为小写。这使得交互式使用更加方便,但如果您使用大写字母,空格或表情符号自动生成表名和列名,则更不方便。

换句话说,如果表名是users且列名是userid,那么查询select userid from users就可以了。只有在表名为Users时才需要开始引用。

我注意到的另一个sql差异是指定dbo架构。 Postgres支持模式(也称为“名称空间”),并具有可用的搜索路径。它还有一个默认的“公共”模式。默认search_path为:

"$user", public

这意味着,如果您select * from foo作为用户名bob,则postgres会检查bob.foo然后public.foo并使用它首先找到的foo 。如果您愿意,可以更改search_path

SET search_path to dbo,public;

这样您就可以跳过查询中的“dbo.”部分。