在RENAME(表)之后,我被迫使用带引号的标识符

时间:2013-07-19 12:50:02

标签: postgresql rename

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

例如:原来的名称是“设备”,在我将其更改为“设备”后,以下SELECT断点:

SELECT * from Devices

但是这个

SELECT * from "Devices"

按预期工作。

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

根据手册identifiers are lower-cased unless quoted

当您重命名它时,您执行了RENAME TO "Devices",从而使名称为大小写混合。你现在必须在所引用的混合案例中引用它。

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

  • devices
  • DEVICES
  • Devices
  • DeViCES

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

  • "Devices"
  • "DEVICES"

这是根据SQL标准,但SQL要求实现UPPER CASE未引用的名称,其中PostgreSQL出于历史原因而lower cases代替。

答案 1 :(得分:0)

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

select * from dEvIceS