ALTER TYPE: cambia la definición de un tipo

Sinopsis

ALTERTYPE name OWNER TO SESSION_USER 
ALTERTYPE name RENAMETO new_name
ALTERTYPE name SETSCHEMA new_schema
ALTERTYPE name RENAME ATTRIBUTE attribute_name TO new_attribute_name [CASCADE|RESTRICT]ALTERTYPE name action[,...]ALTERTYPE name ADDVALUE[IFNOTEXISTS] new_enum_value [  BEFORE  neighbor_enum_value ]ALTERTYPE name RENAMEVALUE existing_enum_value TO new_enum_value
ALTERTYPE name SET( property =value[,...])whereactionis one of:

    ADD ATTRIBUTE attribute_name data_type [COLLATE collation ][CASCADE|RESTRICT]DROP ATTRIBUTE [IFEXISTS] attribute_name [CASCADE|RESTRICT]ALTER ATTRIBUTE attribute_name [SETDATA]TYPE data_type [COLLATE collation ][CASCADE|RESTRICT]

Descripción

ALTER TYPE cambia la definición de un tipo existente. Hay varios subformularios:

OWNER

Este formulario cambia el propietario del tipo.

RENAME

Este formulario cambia el nombre del tipo.

SET SCHEMA

Este formulario mueve el tipo a otro esquema.

RENAME ATTRIBUTE

Este formulario solo se puede utilizar con tipos compuestos. Cambia el nombre de un individuo attribute del tipo.

ADD ATTRIBUTE

Este formulario agrega un nuevo attribute a un tipo compuesto, utilizando la misma sintaxis que CREATE TYPE.

DROP ATTRIBUTE [ IF EXISTS ]

Esta forma deja caer una attribute de un tipo compuesto. Si IF EXISTS se especifica y el attribute no existe, no se lanza ningún error. En este caso, se emite un aviso en su lugar.

ALTER ATTRIBUTE ... SET DATA TYPE

Este formulario cambia el tipo de attribute de tipo compuesto.

ADD VALUE [ IF NOT EXISTS ] [ BEFORE | AFTER ]

Esta forma agrega un nuevo valor a un tipo de enumeración. El lugar del nuevo valor en el orden de la enumeración se puede especificar como BEFORE o AFTER uno de los valores existentes. De lo contrario, el nuevo elemento se agrega al final de la lista de valores.

Si IF NOT EXISTS se especifica, no es un error si el tipo ya contiene el nuevo valor: se emite un aviso pero no se realiza ninguna otra acción. De lo contrario, se producirá un error si el nuevo valor ya está presente.

RENAME VALUE

Esta forma cambia el nombre de un valor de un tipo de enumeración. El lugar del valor en el orden de la enumeración no se ve afectado. Ocurrirá un error si el valor especificado no está presente o el nuevo nombre ya está presente.

SET ( property = value [, ... ] )

Este formulario solo es aplicable a los tipos base. Permite el ajuste de un subconjunto de las propiedades de tipo base que se pueden configurar en CREATE TYPE. Específicamente, estas propiedades se pueden cambiar:

  • RECEIVE se puede configurar con el nombre de una función de entrada binaria, o NONE para eliminar la función de entrada binaria del tipo. El uso de esta opción requiere privilegios de superusuario.

  • SEND se puede configurar con el nombre de una función de salida binaria, o NONE para eliminar la función de salida binaria del tipo. El uso de esta opción requiere privilegios de superusuario.

  • TYPMOD_IN se puede establecer en el nombre de una función de entrada de modificador de tipo, o NONE para eliminar la función de entrada del modificador de tipo del tipo. El uso de esta opción requiere privilegios de superusuario.

  • TYPMOD_OUT se puede establecer en el nombre de una función de salida del modificador de tipo, o NONE para eliminar la función de salida del modificador de tipo del tipo. El uso de esta opción requiere privilegios de superusuario.

  • ANALYZE se puede configurar con el nombre de una función de recopilación de estadísticas de tipo específico, o NONE para eliminar la función de recopilación de estadísticas del tipo. El uso de esta opción requiere privilegios de superusuario.

  • STORAGE se puede configurar en plain, extended, external, o main (consulte la Sección 68.2 para obtener más información sobre lo que significan). Sin embargo, cambiando de plain a otra configuración requiere privilegios de superusuario (porque requiere que todas las funciones C del tipo estén listas para TOAST), y cambiar a plain de otra configuración no está permitido en absoluto (ya que el tipo puede tener valores TOASTed presentes en la base de datos). Tenga en cuenta que cambiar esta opción no cambia por sí solo los datos almacenados, solo establece la estrategia TOAST predeterminada que se utilizará para las columnas de la tabla creadas en el futuro. Consulte ALTER TABLE para cambiar la estrategia TOAST para las columnas de la tabla existente.

Consulte CREAR TIPO para obtener más detalles sobre estas propiedades de tipo. Tenga en cuenta que, cuando corresponda, un cambio en estas propiedades para un tipo base se propagará automáticamente a los dominios basados ​​en ese tipo.

los ADD ATTRIBUTE, DROP ATTRIBUTE, y ALTER ATTRIBUTE las acciones se pueden combinar en una lista de múltiples alteraciones para aplicar en paralelo. Por ejemplo, es posible agregar varios attributes y / o alterar el tipo de varios attributes en un solo comando.

Debe poseer el tipo para usar ALTER TYPE. Para cambiar el esquema de un tipo, también debe tener CREATE privilegio sobre el nuevo esquema. Para modificar el propietario, también debe ser un miembro directo o indirecto del nuevo rol de propietario, y ese rol debe tener CREATE privilegio sobre el esquema del tipo. (Estas restricciones imponen que alterar el propietario no implica nada que no puedas hacer al eliminar y recrear el tipo. Sin embargo, un superusuario puede alterar la propiedad de cualquier tipo de todos modos). attribute o alterar un attribute tipo, también debe tener USAGE privilegio en el attributetipo de datos.

Parámetros

name

El nombre (posiblemente calificado por esquema) de un tipo existente que se va a modificar.

new_name

El nuevo nombre del tipo.

new_owner

El nombre de usuario del nuevo propietario del tipo.

new_schema

El nuevo esquema para el tipo.

attribute_name

El nombre de attribute para agregar, modificar o eliminar.

new_attribute_name

El nuevo nombre del attribute para ser renombrado.

data_type

El tipo de datos del attribute para agregar, o el nuevo tipo de attribute alterar.

new_enum_value

El nuevo valor que se agregará a la lista de valores de un tipo de enumeración, o el nuevo nombre que se dará a un valor existente. Como todos los literales de enumeración, debe citarse.

neighbor_enum_value

El valor de enumeración existente al que se debe agregar el nuevo valor inmediatamente antes o después en el orden de clasificación del tipo de enumeración. Como todos los literales de enumeración, debe citarse.

existing_enum_value

El valor de enumeración existente al que se debe cambiar el nombre. Como todos los literales de enumeración, debe citarse.

property

El nombre de una propiedad de tipo base que se va a modificar; consulte más arriba para conocer los valores posibles.

CASCADE

Propague automáticamente la operación a tablas escritas del tipo que se está modificando y sus descendientes.

RESTRICT

Rechace la operación si el tipo que se modifica es el tipo de una tabla con tipo. Este es el predeterminado.

Notas

Si ALTER TYPE ... ADD VALUE (el formulario que agrega un nuevo valor a un tipo de enumeración) se ejecuta dentro de un bloque de transacción, el nuevo valor no se puede usar hasta después de que se haya confirmado la transacción.

Las comparaciones que involucran un valor de enumeración agregado a veces serán más lentas que las comparaciones que involucran solo miembros originales del tipo de enumeración. Por lo general, esto solo ocurrirá si BEFORE o AFTER se utiliza para establecer la posición de clasificación del nuevo valor en algún lugar que no sea al final de la lista. Sin embargo, a veces sucederá aunque el nuevo valor se agregue al final (esto ocurre si el contador OID envuelto alrededor desde la creación original del tipo enum). La desaceleración suele ser insignificante; pero si es importante, se puede recuperar el rendimiento óptimo eliminando y recreando el tipo de enumeración, o volcando y volviendo a cargar la base de datos.

Ejemplos de

Para cambiar el nombre de un tipo de datos:

ALTERTYPE electronic_mail RENAMETO email;

Para cambiar el propietario del tipo email para joe:

ALTERTYPE email OWNER TO joe;

Para cambiar el esquema del tipo email para customers:

ALTERTYPE email SETSCHEMA customers;

Para agregar un nuevo attribute a un tipo compuesto:

ALTERTYPE compfoo ADD ATTRIBUTE f3 int;

Para agregar un nuevo valor a un tipo de enumeración en una posición de clasificación particular:

ALTERTYPE colors ADDVALUE'orange'AFTER'red';

Para cambiar el nombre de un valor de enumeración:

ALTERTYPE colors RENAMEVALUE'purple'TO'mauve';

Para crear funciones de E / S binarias para un tipo base existente:

CREATEFUNCTION mytypesend(mytype)RETURNS bytea ...;CREATEFUNCTION mytyperecv(internal, oid,integer)RETURNS mytype ...;ALTERTYPE mytype SET(
    SEND = mytypesend,
    RECEIVE = mytyperecv
);

Compatibilidad

Las variantes para agregar y soltar attributes son parte del estándar SQL; las otras variantes son extensiones de PostgreSQL.

Ver también

CREAR TIPO, TIPO DE GOTA

Anterior Hasta próximo
ALTER TRIGGER Hogar ALTER USUARIO