当前位置: 首页 > 知识库问答 >
问题:

Postgres列或表名何时需要引号,何时不需要引号?

楮景明
2023-03-14

让我们考虑下面的PoxGrES查询:

SELECT * 
FROM "MY_TABLE"
WHERE "bool_var"=FALSE 
 AND "str_var"='something';

当我删除"str_var"周围的引号时,查询无法正确响应,但当我删除"bool_var"周围的引号时,查询就不能正确响应了。为什么?在这种情况下,正确的查询编写方法是什么,布尔列周围没有引号,文本列周围没有引号?还有别的吗?

共有2个答案

祖奇
2023-03-14

多亏了@TimBiegeleisen的评论,我才能准确指出问题;我使用了保留的关键字(“用户”)作为列名。

链接到文档中的保留关键字:https://www.postgresql.org/docs/current/sql-keywords-appendix.html.

现在我知道不要使用引号来查询列名,而是避免保留关键字作为列名。

席银龙
2023-03-14

PostgreSQL将所有名称(表名、列名等)转换为小写,如果您不阻止它,请在创建表"My_Table_ABC"("My_Very_Upper_and_Lowercasy_Column"数字,...)中双引号引用它们。如果您有这样的名称,您必须始终在选择和其他引用中双引号引用这些名称。

我建议不要创建这样的表,也不要在a-z0-9之外使用字符。您不能保证针对数据库使用的所有软件、库等都支持区分大小写。记住并重复引用这句话也很乏味。

 类似资料:
  • 问题内容: 据我所知,如果字体包含空格,则需要使用双引号或单引号,例如: 但是在Google字体上,我也看到了 有些人甚至这样使用它: 我觉得这很奇怪,因为以下方法也可以: 那么CSS中字体名称周围引号的正确用法是什么? 问题答案: 您可以随时把一个特定的字体系列名称在引号,双或单,所以,和是等价的。仅CSS定义的通用字体系列之类的名称必须不带引号。 与流行的看法相反,字体名称由空格分隔的名称组成

  • 所以我遇到了以下让我惊讶的行为。我最初认为DateTime可能是postgres数据类型,但BidOpen呢?还有一个有趣的事情是错误消息中列名的情况。我几乎觉得这与未引用的名称不区分大小写有关。为什么我需要用引号包围列名才能查询工作? 模式如下所示:

  • 问题内容: 我在用多个JOIN进行查询时注意到,除非给表名之一指定别名,否则查询将无法工作。 这是一个简单的例子来说明这一点: 这 不起作用 : 这样 做 : 有人可以解释吗? 问题答案: 您在查询中使用同一个表购买两次。您需要通过提供不同的名称来区分它们。 您需要提供一个别名: 想象两个人有完全相同的约翰·多伊。如果您致电John,双方都会回复您的电话。您不能给两个人使用相同的名字,并假设他们会

  • 问题内容: 我记得很久以前就听说过,在CSS font-family属性中将引号括起来包含多个单词的字体名称被认为是“最佳实践”,例如: 对于它的麻烦,我尝试从中删除引号,而Safari和Firefox在呈现它时没有任何问题。 那么,这种经验法则是否有逻辑,还是只是一个神话?较旧的浏览器是否有问题,不再适用于当前版本?我这样做已经有很长时间了,以至于我从未停止思考这是否真的必要。 问题答案: 在C

  • 问题内容: 我对JAX-WS进行了概述,并注意到了(和)的一些引用。 在什么情况下需要?(我认为JSR 109服务器?!) 问题答案: 是使用SUN的参考实现将Web服务作为标准存档部署在非Java EE5 Servlet容器上时所需的专有部署描述符。 Sun的RI 用作servlet上下文事件的侦听器和调度程序servlet。两者都必须在中声明。然后需要该文件为定义Web服务端点,以使其知道必须