我对NPOCO + PostgreSQL Space很陌生,因为我已经决定暂时离开SQL Server。
我的问题是通常在NPOCO中写这样的查询
database.Execute("select userId from Users");
在SQL Server世界中一切正常。来到PostGreSQL世界,我被这样看起来有点奇怪的问题所困扰
SELECT "UserId", from dbo."Users"
现在我很想知道如何在NPOCO中使用PostgreSQL查询,看到列名和表名必须在引号中
提前致谢
答案 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.
”部分。