查询坚持引用列
Query insists on quoted columns
我有一个 Postgres 运行ning 的本地副本,我正在使用 nHibernate 作为 ORM 开发 C# .Net Core 2.1 应用程序。
开始抛出异常:PostgresException: 42703: column this_.datasetname does not exist
当我在 pgAdmin 中复制 SQL 和 运行 时,我得到了类似的错误。
这是 SQL 的简短版本,它给出了相同的错误:
SELECT this_.datasetName FROM orders this_
ERROR: column this_.datasetname does not exist LINE 1: SELECT
this_.datasetName FROM orders this_
^ HINT: Perhaps you meant to reference the column "this_.datasetName". SQL state: 42703 Character: 8
如果我在列名称周围添加引号(但不是按照建议在 _this.
周围添加引号)它会起作用,但显然我不能告诉 nHibernate 这样做。
SELECT this_."datasetName" FROM orders this_
以下也可以正常工作:
SELECT "datasetName" FROM orders
为什么要坚持加引号?从来没有。
这是因为此列首先是用双引号引起来的 - 这使得标识符区分大小写,而默认情况下则不区分大小写。由于标识符包含大小写混合,你被卡住了:标识符需要在你使用它的任何地方引用。
如果您查看 table 的定义,您会看到如下内容:
create table orders (
...,
"datasetName" text,
...
)
我强烈建议修复您的架构。带引号的标识符通常不会增加任何价值,而另一方面它们会使事情不必要地复杂化。 Camel case 不能很好地填充数据库标识符,snake case 更好,因为 case 没有意义:
create table orders (
...,
dataset_name text,
...
)
我有一个 Postgres 运行ning 的本地副本,我正在使用 nHibernate 作为 ORM 开发 C# .Net Core 2.1 应用程序。
开始抛出异常:PostgresException: 42703: column this_.datasetname does not exist
当我在 pgAdmin 中复制 SQL 和 运行 时,我得到了类似的错误。
这是 SQL 的简短版本,它给出了相同的错误:
SELECT this_.datasetName FROM orders this_
ERROR: column this_.datasetname does not exist LINE 1: SELECT this_.datasetName FROM orders this_ ^ HINT: Perhaps you meant to reference the column "this_.datasetName". SQL state: 42703 Character: 8
如果我在列名称周围添加引号(但不是按照建议在 _this.
周围添加引号)它会起作用,但显然我不能告诉 nHibernate 这样做。
SELECT this_."datasetName" FROM orders this_
以下也可以正常工作:
SELECT "datasetName" FROM orders
为什么要坚持加引号?从来没有。
这是因为此列首先是用双引号引起来的 - 这使得标识符区分大小写,而默认情况下则不区分大小写。由于标识符包含大小写混合,你被卡住了:标识符需要在你使用它的任何地方引用。
如果您查看 table 的定义,您会看到如下内容:
create table orders (
...,
"datasetName" text,
...
)
我强烈建议修复您的架构。带引号的标识符通常不会增加任何价值,而另一方面它们会使事情不必要地复杂化。 Camel case 不能很好地填充数据库标识符,snake case 更好,因为 case 没有意义:
create table orders (
...,
dataset_name text,
...
)