名称和标识符 - Amazon Redshift

名称和标识符

名称用于标识数据库对象,包括表和列以及用户和密码。名称标识符 这两个术语可互换使用。有两种类型的标识符:标准标识符以及带引号的标识符或分隔标识符。标识符必须仅包含 UTF-8 可打印字符。标准标识符和分隔标识符中的 ASCII 字母是不区分大小写的,并且会在数据库中转换为小写。默认情况下,查询结果中的列名称以小写形式返回。要以大写形式返回列名称,请将 describe_field_name_in_uppercase 配置参数设置为 true

标准标识符

标准 SQL 标识符遵循一组规则并且必须:

  • 以 ASCII 单字节字母字符或下划线字符开头,或者以 UTF-8 多字节字符(长度为 2 到 4 字节)开头。

  • 后续字符可以是 ASCII 单字节字母数字字符、下划线或美元符号,或者 UTF-8 多字节字符 (两到四字节长)。

  • 长度介于 1 到 127 个字节之间,不包含分隔标识符的引号。

  • 不包含引号和空格。

  • 不是保留的 SQL 关键字。

分隔标识符

分隔标识符(也称为“带引号的标识符”)以双引号 (") 开头和结尾。如果您使用分隔标识符,则必须在每次引用对象时使用双引号。标识符可包含双引号以外的任何标准 UTF-8 可打印字符。因此,您可创建包含非法字符的列或表名称,如空格或百分比符号。

分隔标识符中的 ASCII 字母是不区分大小写的,并且会转换为小写。要在字符串中使用双引号,您必须在字符串前加上另一个双引号字符。

区分大小写的标识符

区分大小写的标识符(也称为混合大小写标识符)可以包含大写字母和小写字母。要使用区分大小写的标识符,可您可以将配置 enable_case_sensitive_identifier 设置为 true。您可以为集群或会话设置此配置。有关更多信息,请参阅《Amazon Redshift 管理指南》中的默认参数值enable_case_sensitive_identifier

系统列名称

以下 PostgreSQL 系统列名称无法用作用户定义列中的列名称。有关更多信息,请参阅 https://www.postgresql.org/docs/8.0/static/ddl-system-columns.html

  • oid

  • tableoid

  • xmin

  • cmin

  • xmax

  • cmax

  • ctid

示例

此表显示了分隔标识符的示例、生成的输出和讨论:

语法 结果 讨论
"group" group GROUP 是保留字,因此在标识符中使用它需要双引号。
"""WHERE""" "where" WHERE 也是一个保留字。要在字符串中包含引号,请使用其他双引号字符对每个双引号字符进行转义。
"This name" this name 需要使用双引号来保留空格。
"This ""IS IT""" this "is it" 围绕 IS IT 的每个引号必须在前面添加额外的引号才能成为名称的一部分。

创建一个名为 group 的表,其中一列的名称为 this "is it":

create table "group" ( "This ""IS IT""" char(10));

下面的查询返回相同的结果:

select "This ""IS IT""" from "group"; this "is it" -------------- (0 rows)
select "this ""is it""" from "group"; this "is it" -------------- (0 rows)

以下完全限定的 table.column 语法也返回相同的结果:

select "group"."this ""is it""" from "group"; this "is it" -------------- (0 rows)

以下 CREATE TABLE 命令创建一个表,其中的一个列名包含斜杠:

create table if not exists city_slash_id( "city/id" integer not null, state char(2) not null);