-1

我对 NPOCO + PostgreSQL 空间很陌生,因为我决定暂时远离 SQL Server。

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

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

在 SQL Server 世界中一切正常。来到 PostGreSQL 世界,我被这样看起来有点奇怪的查询撞到了

  SELECT "UserId", from dbo."Users"

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

提前致谢

4

1 回答 1

0

如果 postgres 中的列名和表名包含大写字符或特殊字符,则它们必须用引号引起来。也就是说,默认情况下,postgres SQL 解析器将强制所有未加引号的名称小写。这使得交互使用更方便一些,但如果你有软件自动生成带有大写字母、空格或表情符号的表和列名,那就不太方便了。

换句话说,如果表名是users并且列名是userid,那么查询select userid from users就可以正常工作。只有当表名是Users你必须开始引用时。

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

"$user", public

这只是意味着如果您select * from foo作为 username bob,postgres 将检查bob.foo然后public.foo使用它首先找到的任何内容 as foosearch_path如果您愿意,您可以更改:

SET search_path to dbo,public;

这将允许您跳过dbo.查询的“”部分。

于 2016-06-29T17:42:21.220 回答