0

在 Postgres 中重命名表后,我遇到了一个奇怪的行为:如果我引用没有引号的表,它就不起作用。

例如:原始名称是«devices»,在我将其更改为«Devices»后,以下 SELECT 中断:

SELECT * from Devices

但是这个

SELECT * from "Devices"

按预期工作。

任何的想法?

4

2 回答 2

4

根据手册,除非带引号,否则标识符是小写的

当你重命名它时,你做了 a RENAME TO "Devices",从而使名称混合大小写。您现在必须在任何地方以引用的混合大小写引用它。

对于 PostgreSQL,所有这些都是devices表的名称:

  • devices
  • DEVICES
  • Devices
  • DeViCES

但这些是具有混合大小写名称的单独表的名称:

  • "Devices"
  • "DEVICES"

这是根据 SQL 标准,除了 SQL 需要实现UPPER CASE不带引号的名称,而 PostgreSQL 由于历史原因lower cases而不是引用名称。

于 2013-07-19T12:51:34.607 回答
0

再次将其重命名为devices(不带双引号的小写字母)。然后,您可以在任何情况下引用它,包括混合大小写:

select * from dEvIceS
于 2013-07-19T12:59:21.530 回答