查询坚持使用带引号的列

问题描述 投票:0回答:1

我正在运行Postgres的本地副本,并且我正在使用nHibernate作为ORM的C#.Net Core 2.1应用程序上工作。

它开始引发异常:PostgresException: 42703: column this_.datasetname does not exist

复制SQL并在pgAdmin中运行时,我收到类似的错误。

这是给出相同错误的SQL的简短版本:

SELECT this_.datasetName FROM orders this_

错误:列this_.datasetname不存在LINE 1:SELECTthis_.datasetName FROM命令this_^提示:也许您打算引用列“ this_.datasetName”。 SQL状态:42703字符:8

如果我在列名的周围加上引号(但建议不要在_this.周围加上引号,则可以,但是显然我不能告诉nHibernate这样做。

SELECT this_."datasetName" FROM orders this_

以下内容也可以正常工作:

SELECT "datasetName" FROM orders

为什么会坚持添加引号?它从未使用过。

postgresql nhibernate
1个回答
0
投票

这是因为此列首先是用双引号引起来的-这使标识符区分大小写,而默认情况下则不区分大小写。由于标识符包含大小写混合的内容,因此您会遇到麻烦:在使用标识符的任何地方都必须加引号。

如果查看表的定义,将会看到类似以下内容的内容:

create table orders (
    ...,
    "datasetName" text,
    ...
)

我强烈建议您修复您的架构。带引号的标识符通常不会增加任何值,但另一方面,它们会使不必要的事情变得复杂。驼峰大小写不适用于数据库标识符,蛇形大小写更好,因为大小写没有意义:

create table orders (
    ...,
    dataset_name text,
    ...
)
© www.soinside.com 2019 - 2024. All rights reserved.