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
oAFTER
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, oNONE
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, oNONE
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, oNONE
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, oNONE
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, oNONE
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 enplain
,extended
,external
, omain
(consulte la Sección 68.2 para obtener más información sobre lo que significan). Sin embargo, cambiando deplain
a otra configuración requiere privilegios de superusuario (porque requiere que todas las funciones C del tipo estén listas para TOAST), y cambiar aplain
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 |