CREATE COLLATION

CREATE COLLATION — definir una nueva colación (ordenación)

Synopsis

CREATE COLLATION [ IF NOT EXISTS ] name (
    [ LOCALE = locale, ]
    [ LC_COLLATE = lc_collate, ]
    [ LC_CTYPE = lc_ctype, ]
    [ PROVIDER = provider, ]
    [ DETERMINISTIC = boolean, ]
    [ RULES = rules, ]
    [ VERSION = version ]
)
CREATE COLLATION [ IF NOT EXISTS ] name FROM existing_collation

Descripción

CREATE COLLATION define una nueva colación utilizando la configuración de localización (locale) del sistema operativo especificada, o copiando una colación existente.

Para poder crear una colación, debes tener el privilegio CREATE en el esquema de destino.

Parámetros

IF NOT EXISTS

No lanza ningún error si ya existe una colación con el mismo nombre. En este caso se emite una advertencia. Ten en cuenta que no hay garantía de que la colación existente sea similar a la que se habría creado.

name

El nombre de la colación. El nombre de la colación puede estar calificado por el esquema. Si no lo está, la colación se define en el esquema actual. El nombre de la colación debe ser único dentro de ese esquema. (Los catálogos del sistema pueden contener colaciones con el mismo nombre para otras codificaciones, pero estas se ignoran si la codificación de la base de datos no coincide).

locale

El nombre de la localización (locale) para esta colación. Consulta Section 23.2.2.3.1 y Section 23.2.2.3.2 para obtener más detalles.

Si el proveedor (provider) es libc, este parámetro es un atajo para establecer LC_COLLATE y LC_CTYPE a la vez. Si especificas locale, no puedes especificar ninguno de esos dos parámetros.

Si el proveedor (provider) es builtin, entonces se debe especificar locale y establecerlo en C, C.UTF-8 o PG_UNICODE_FAST.

lc_collate

Si el proveedor (provider) es libc, utiliza la localización del sistema operativo especificada para la categoría de localización LC_COLLATE.

lc_ctype

Si el proveedor (provider) es libc, utiliza la localización del sistema operativo especificada para la categoría de localización LC_CTYPE.

provider

Especifica el proveedor a utilizar para los servicios de localización asociados con esta colación. Los valores posibles son builtin, icu (si el servidor se compiló con soporte para ICU) o libc. libc es el valor por defecto. Consulta la Section 23.1.4 para obtener más detalles.

DETERMINISTIC

Especifica si la colación debe utilizar comparaciones deterministas. El valor por defecto es true. Una comparación determinista considera que las cadenas que no son idénticas byte a byte son diferentes, incluso si la comparación las considera lógicamente iguales. PostgreSQL resuelve los empates utilizando una comparación byte a byte. Una comparación que no sea determinista puede hacer que la colación sea, por ejemplo, insensible a mayúsculas y minúsculas o a acentos. Para ello, debes elegir una configuración de LOCALE adecuada y establecer aquí la colación como no determinista.

Las colaciones no deterministas solo son compatibles con el proveedor ICU.

rules

Especifica reglas de colación adicionales para personalizar el comportamiento de la colación. Esto solo es compatible con ICU. Consulta la Section 23.2.3.4 para obtener más detalles.

version

Especifica la cadena de versión a almacenar con la colación. Normalmente, esto debería omitirse, lo que hará que la versión se calcule a partir de la versión real de la colación según la proporcione el sistema operativo. Esta opción está diseñada para ser utilizada por pg_upgrade para copiar la versión de una instalación existente.

Consulta también la ALTER COLLATION para saber cómo manejar los desajustes de versión de las colaciones.

existing_collation

El nombre de una colación existente que se desea copiar. La nueva colación tendrá las mismas propiedades que la existente, pero será un objeto independiente.

Notas

CREATE COLLATION adquiere un bloqueo SHARE ROW EXCLUSIVE, que es autoconcluyente, en el catálogo del sistema pg_collation, por lo que solo se puede ejecutar un comando CREATE COLLATION a la vez.

Usa DROP COLLATION para eliminar colaciones definidas por el usuario.

Consulta la Section 23.2.2.3 para obtener más información sobre cómo crear colaciones.

Al utilizar el proveedor de colación libc, la localización debe ser aplicable a la codificación de la base de datos actual. Consulta CREATE DATABASE para conocer las reglas precisas.

Ejemplos

Para crear una colación a partir de la localización del sistema operativo fr_FR.utf8 (asumiendo que la codificación de la base de datos actual es UTF8):

CREATE COLLATION french (locale = 'fr_FR.utf8');

Para crear una colación utilizando el proveedor ICU utilizando el orden de clasificación de la guía telefónica alemana:

CREATE COLLATION german_phonebook (provider = icu, locale = 'de-u-co-phonebk');

Para crear una colación utilizando el proveedor ICU, basada en la localización raíz de ICU, con reglas personalizadas:

CREATE COLLATION custom (provider = icu, locale = 'und', rules = '&V << w <<< W');

Consulta la Section 23.2.3.4 para obtener más detalles y ejemplos sobre la sintaxis de las reglas.

Para crear una colación a partir de una colación existente:

CREATE COLLATION german FROM "de_DE";

Esto puede resultar conveniente para poder utilizar nombres de colación independientes del sistema operativo en las aplicaciones.

Compatibilidad

Existe una instrucción CREATE COLLATION en el estándar SQL, pero está limitada a copiar una colación existente. La sintaxis para crear una nueva colación es una extensión de PostgreSQL.

Consulte también

ALTER COLLATION, DROP COLLATION