Postgres 解决由破折号 (-) 引起的语法错误

Posted

技术标签:

【中文标题】Postgres 解决由破折号 (-) 引起的语法错误【英文标题】:Postgres solving a syntax error caused by a dash (-) 【发布时间】:2021-03-17 22:12:27 【问题描述】:

我正在尝试从名为 physionet-data.mimiciii_clinical.diagnoses_icd 的数据库中查询

PostgresSQL 返回以下错误消息:

quan.sql:273: ERROR:  syntax error at or near "`"
LINE 132: from `physionet-data.mimiciii_clinical.diagnoses_icd` icd

我认为这是由破折号引起的。如果我更改 `for' 会出现同样的错误

quan.sql:273: ERROR:  syntax error at or near
"'physionet-data.mimiciii_clinical.diagnoses_icd'"

关于如何解决这个问题的任何线索?

【问题讨论】:

postgresql.org/docs/current/… 【参考方案1】:

您需要使用双引号引用该架构名称:

select ...
from "physionet-data".mimiciii_clinical.diagnoses_icd

请注意,引用标识符使其区分大小写。您需要确保创建模式的字符大小写与您在此处使用的字符大小写匹配。

使用需要引用的标识符通常不是一个好主意;正如您所了解的,这需要在您以后使用它的每个地方引用它们。如果这还不算太晚,我建议将架构名称更改为不需要引用的名称。

【讨论】:

嗨@GMB!感谢您的快速回复:) 不幸的是,我无法更改架构名称,它是一个公共数据库...我尝试了您的解决方案,但没有成功。我得到了:第 132 行:from "physionet-data".mimiciii_clinical.diagnoses_icd icd ^ 这可能是因为 from 在代码中排在第一位,如下所示:from "physionet-data".mimiciii_clinical.diagnoses_icd icd where ... select ... 代码的 Github 页面在那里:github.com/MIT-LCP/mimic-code/blob/master/concepts/comorbidity/…跨度> 您能否解释一下“您需要确保创建模式的字符大小写与您在此处使用的字符大小写匹配”的意思? @LucileTer-Minassian:我的意思是,如果您的架构是使用混合的大写/小写创建的,那么您需要在查询中使用它。见:wiki.postgresql.org/wiki/… 哦,我明白了!我认为架构都是小写的,所以我们在这方面做得很好。但是如果双引号不起作用,还有其他选择吗?

以上是关于Postgres 解决由破折号 (-) 引起的语法错误的主要内容,如果未能解决你的问题,请参考以下文章

一个由自增运算符以及C语法顺序细节引起的bug

TypeScript 这个语法“-?”是啥意思? (破折号问题)是啥意思?

如何生成没有破折号的 uuid

Heroku/Postgres:引起:java.net.ConnectException:连接被拒绝(连接被拒绝)

如何解析/捕获由破折号分隔的字符串?

尝试导入 Python 文件时可以在 Python 文件中使用破折号吗?