CREATE COLLATION — definir una nueva colación (ordenación)
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 ]nameFROMexisting_collation
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.
IF NOT EXISTSNo 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.
nameEl 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).
localeEl 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.
rulesEspecifica 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_collationEl 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.
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.
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.
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.