Nombres e identificadores - Amazon Redshift

Nombres e identificadores

Los nombres identifican objetos de base de datos, incluidas tablas y columnas, así como usuarios y contraseñas. Los términos nombre e identificador se pueden usar indistintamente. Hay dos tipos de identificadores: identificadores estándar e identificadores delimitados o entre comillas. Los identificadores solo deben tener caracteres UTF-8 imprimibles. Las letras ASCII en los identificadores estándar y delimitados distinguen entre mayúsculas y minúsculas, y se incorporan en minúsculas en la base de datos. En los resultados de la consulta, los nombres de columna se devuelven en minúsculas de forma predeterminada. Para devolver nombres de columna en mayúsculas, establezca el parámetro de configuración describe_field_name_in_uppercase en true.

Identificadores estándar

Los identificadores SQL estándar se adhieren a un conjunto de reglas y:

  • Deben comenzar con un carácter alfabético de byte único ASCII o carácter de guion bajo, o un carácter multibyte UTF-8 de dos a cuatro bytes.

  • Los caracteres posteriores pueden ser caracteres alfanuméricos de byte único ASCII, guiones bajos o signos de dólar, o caracteres multibyte UTF-8 de dos a cuatro bytes.

  • Deben tener entre 1 y 127 bytes, sin incluir las comillas para los identificadores delimitados.

  • No deben contener comillas ni espacios.

  • No deben ser una palabra clave SQL reservada.

Identificadores delimitados

Los identificadores delimitados (también conocidos como identificadores entre comillas) comienzan y finalizan con comillas dobles ("). Si utiliza un identificador delimitado, debe usar las comillas dobles para cada referencia a ese objeto. El identificador puede contener cualquier carácter UTF-8 imprimible estándar, aparte de las comillas dobles. Por lo tanto, puede crear nombres de columna o tabla que incluyan caracteres de otra forma ilegales, como espacios y el símbolo de porcentaje.

Las letras ASCII en los identificadores delimitados distinguen entre mayúsculas y minúsculas, y se incorporan en minúsculas. Para utilizar una comilla doble en una cadena, debe precederla con otro carácter de comilla doble.

Identificadores que distinguen entre mayúsculas y minúsculas

Los identificadores que distinguen entre mayúsculas y minúsculas (también conocidos como identificadores con combinación de mayúsculas y minúsculas) pueden contener letras tanto mayúsculas como minúsculas. Para utilizar identificadores que distinguen entre mayúsculas y minúsculas, puede establecer la configuración enable_case_sensitive_identifier en true. Puede establecer esta configuración para el clúster o para una sesión. Para obtener más información, consulte Valores de parámetros predeterminados en la Guía de administración de Amazon Redshift y enable_case_sensitive_identifier.

Nombres de columna del sistema

Los siguientes nombres de columnas del sistema de PostgreSQL no pueden utilizarse como nombres de columnas en columnas definidas por el usuario. Para obtener más información, consulte https://www.postgresql.org/docs/8.0/static/ddl-system-columns.html.

  • oid

  • tableoid

  • xmin

  • cmin

  • xmax

  • cmax

  • ctid

Ejemplos

En esta tabla se muestran ejemplos de identificadores delimitados, el resultado y una explicación:

Sintaxis Resultado Explicación
"group" grupo GROUP es una palabra reservada, por lo que su uso dentro de un identificador requiere comillas dobles.
"""WHERE""" "where" WHERE también es una palabra reservada. Para incluir comillas en la cadena, aplique un escape a cada carácter de comilla doble con caracteres de comillas dobles adicionales.
"This name" this name Se requieren comillas dobles para preservar el espacio.
"This ""IS IT""" this "is it" Las comillas que encierran IS IT deben estar precedidas por una comilla adicional para que pasen a formar parte del nombre.

Para crear una tabla denominada grupo con una columna denominada "is it":

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

Las siguientes consultas devuelven el mismo resultado:

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

La siguiente sintaxis table.column completamente calificada también devuelve el mismo resultado:

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

El siguiente comando CREATE TABLE crea una tabla con una barra diagonal en un nombre de columna:

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