ALTER COLLATION: cambia la definición de una colación

Sinopsis

ALTER COLLATION name REFRESH VERSION

ALTER COLLATION name RENAMETO new_name
ALTER COLLATION name OWNER TO CURRENT_USER
ALTER COLLATION name SETSCHEMA new_schema

Descripción

ALTER COLLATION cambia la definición de una colación.

Debe poseer la intercalación para usar ALTER COLLATION. Para modificar el propietario, también debe ser miembro directo o indirecto del nuevo rol de propietario, y ese rol debe tener CREATE privilegio en el esquema de la colación. (Estas restricciones imponen que modificar el propietario no hace nada que no pudieras hacer eliminando y recreando la intercalación. Sin embargo, un superusuario puede modificar la propiedad de cualquier intercalación de todos modos).

Parámetros

name

El nombre (opcionalmente calificado por esquema) de una intercalación existente.

new_name

El nuevo nombre de la colación.

new_owner

El nuevo dueño de la colación.

new_schema

El nuevo esquema para la intercalación.

REFRESH VERSION

Actualice la versión de la intercalación. Consulte las notas a continuación.

notas

Cuando se utilizan intercalaciones proporcionadas por la biblioteca ICU, la versión específica de ICU del intercalador se registra en el catálogo del sistema cuando se crea el objeto de intercalación. Cuando se usa la intercalación, la versión actual se compara con la versión grabada y se emite una advertencia cuando hay una discrepancia, por ejemplo:

WARNING:  collation "xx-x-icu" has version mismatch
DETAIL:  The collation in the database was created using version 1.2.3.4, but the operating system provides version 2.3.4.5.
HINT:  Rebuild all objects affected by this collation and run ALTER COLLATION pg_catalog."xx-x-icu" REFRESH VERSION, or build PostgreSQL with the right library version.

Un cambio en las definiciones de intercalación puede generar índices corruptos y otros problemas porque el sistema de la base de datos se basa en objetos almacenados que tienen un cierto orden de clasificación. En general, esto debe evitarse, pero puede suceder en circunstancias legítimas, como cuando se usa pg_upgrade para actualizar a binarios de servidor vinculados con una versión más nueva de ICU. Cuando esto sucede, todos los objetos que dependen de la intercalación deben reconstruirse, por ejemplo, usando REINDEX. Cuando haya terminado, la versión de intercalación se puede actualizar con el comando ALTER COLLATION ... REFRESH VERSION. Esto actualizará el catálogo del sistema para registrar la versión actual del intercalador y hará que la advertencia desaparezca. Tenga en cuenta que esto en realidad no verifica si todos los objetos afectados se han reconstruido correctamente.

Al utilizar intercalaciones proporcionadas por libc y PostgreSQL se creó con la biblioteca GNU C, la versión de la biblioteca C se usa como una versión de colación. Dado que las definiciones de intercalación generalmente cambian solo con las versiones de la biblioteca GNU C, esto proporciona cierta defensa contra la corrupción, pero no es completamente confiable.

Actualmente, no hay seguimiento de versiones para la intercalación predeterminada de la base de datos.

La siguiente consulta se puede utilizar para identificar todas las intercalaciones en la base de datos actual que deben actualizarse y los objetos que dependen de ellas:

SELECT pg_describe_object(refclassid, refobjid, refobjsubid)AS"Collation",
       pg_describe_object(classid, objid, objsubid)AS"Object"FROM pg_depend d JOIN pg_collation c
       ON refclassid ='pg_collation'::regclass AND refobjid = c.oid
  WHERE c.collversion <> pg_collation_actual_version(c.oid)ORDERBY1,2;

Ejemplos

Para cambiar el nombre de la intercalación de_DE para german:

ALTER COLLATION "de_DE"RENAMETO german;

Para cambiar el propietario de la colación en_US para joe:

ALTER COLLATION "en_US" OWNER TO joe;

Compatibilidad

No hay ALTER COLLATION declaración en el estándar SQL.

Ver también

CREAR COLACIÓN, SOLTAR COLACIÓN

Anterior Arriba Próximo
ALTERAR AGREGADO Casa ALTERAR CONVERSIÓN