Nomes e identificadores
Os nomes identificam objetos do banco de dados, incluindo tabelas e colunas, assim como usuários e senhas. Os termos nome e identificador podem ser usados de forma intercambiável. Há dois tipos de identificadores, identificadores padrão e identificadores citados ou delimitados. Os identificadores devem consistir somente em caracteres UTF-8 imprimíveis. As letras ASCII em identificadores padrão e delimitados não fazem distinção entre maiúsculas e minúsculas e são convertidas em minúsculas no banco de dados. Nos resultados da consulta, os nomes de coluna são retornados, por padrão, em minúsculas. Para retornar os nomes de coluna em maiúsculas, defina o parâmetro de configuração describe_field_name_in_uppercase como true
.
Identificadores padrão
Os identificadores SQL padrão aderem a um conjunto de regras e devem:
-
Começar com um caractere ASCII alfabético de único byte ou caractere sublinhado ou com um caractere UTF-8 multibyte com dois a quatro bytes de extensão.
-
Os caracteres subsequentes podem ser caracteres ASCII alfanuméricos, sublinhados ou com cifrão ou caracteres UTF-8 multibyte com dois a quatro bytes de extensão.
-
Ter entre 1 e 127 bytes de comprimento, sem incluir aspas para identificadores delimitados.
-
Não conter qualquer aspa ou espaço.
-
Não ser uma palavra chave SQL reservada.
Identificadores delimitados
Identificadores delimitados (também conhecidos como identificadores citados) começam e terminam com aspas ("). Se você usar um identificador delimitado, deverá usar aspas duplas para todas as referências para aquele objeto. O identificador pode conter qualquer caractere padrão UTF-8 imprimível, exceto as próprias aspas duplas. Portanto, você pode criar os nomes de coluna ou tabela incluindo caracteres geralmente ilegais, tais como espaços ou o símbolo de por cento.
As letras ASCII em identificadores delimitados não fazem distinção entre maiúsculas e minúsculas e são convertidas em minúsculas. Para usar aspas duplas em uma string, você deve precedê-la com outro caractere de aspas duplas.
Identificadores que diferenciam maiúsculas e minúsculas
Identificadores que diferenciam maiúsculas e minúsculas (também conhecidos como identificadores de maiúsculas e minúsculas) podem conter letras maiúsculas e minúsculas. Para usar identificadores que diferenciam maiúsculas e minúsculas, você pode definir a configuração enable_case_sensitive_identifier
como true
. Você pode definir essa configuração para o cluster ou para uma sessão. Para obter mais informações, consulte “Default parameter values” (Valores de parâmetro comuns) no Guia de gerenciamento de clusters do Amazon Redshift e enable_case_sensitive_identifier.
Nomes de coluna de sistema
Os nomes de coluna de sistema do PostgreSQL a seguir não podem ser usados como nomes de colunas definidas pelo usuário. Para obter mais informações, consulte https://www.postgresql.org/docs/8.0/static/ddl-system-columns.html
oid
tableoid
xmin
cmin
xmax
cmax
ctid
Exemplos
Esta tabela mostra exemplos de identificadores delimitados, a saída resultante e uma discussão:
Sintaxe | Resultado | Discussão |
---|---|---|
"grupo" | group | GRUPO é uma palavra reservada, portanto, seu uso em um identificador requer aspas duplas. |
"""WHERE""" | "where" | WHERE também é uma palavra reservada. Para incluir aspas na string, faça o escape de cada caractere de aspas duplas com caracteres de aspas duplas adicionais. |
“Este nome” | este nome | As aspas duplas são necessárias para preservar o espaço. |
"É ""ISSO""" | é "isso" | As aspas em torno de IS IT devem ser precedidas por uma aspa extra para fazer parte do nome. |
Para criar uma tabela chamada grupo com uma coluna chamada “isso”:
create table "group" ( "This ""IS IT""" char(10));
As seguintes consultas retornam o mesmo resultado:
select "This ""IS IT""" from "group"; this "is it" -------------- (0 rows)
select "this ""is it""" from "group"; this "is it" -------------- (0 rows)
A seguinte sintaxe table.column
totalmente qualificada também retorna o mesmo resultado:
select "group"."this ""is it""" from "group"; this "is it" -------------- (0 rows)
O comando CREATE TABLE a seguir cria uma tabela com uma barra em um nome de coluna:
create table if not exists city_slash_id( "city/id" integer not null, state char(2) not null);