ALTER FOREIGN TABLE — cambiar la definición de una tabla foránea
ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ]name[ * ]action[, ... ] ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ]name[ * ] RENAME [ COLUMN ]column_nameTOnew_column_nameALTER FOREIGN TABLE [ IF EXISTS ]nameRENAME TOnew_nameALTER FOREIGN TABLE [ IF EXISTS ]nameSET SCHEMAnew_schemadondeactionpuede ser uno de los siguientes: ADD [ COLUMN ] [ IF NOT EXISTS ]column_namedata_type[ COLLATEcollation] [column_constraint[ ... ] ] DROP [ COLUMN ] [ IF EXISTS ]column_name[ RESTRICT | CASCADE ] ALTER [ COLUMN ]column_name[ SET DATA ] TYPEdata_type[ COLLATEcollation] ALTER [ COLUMN ]column_nameSET DEFAULTexpressionALTER [ COLUMN ]column_nameDROP DEFAULT ALTER [ COLUMN ]column_name{ SET | DROP } NOT NULL ALTER [ COLUMN ]column_nameSET STATISTICSintegerALTER [ COLUMN ]column_nameSET (attribute_option=value[, ... ] ) ALTER [ COLUMN ]column_nameRESET (attribute_option[, ... ] ) ALTER [ COLUMN ]column_nameSET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT } ALTER [ COLUMN ]column_nameOPTIONS ( [ ADD | SET | DROP ]option['value'] [, ... ]) ADDtable_constraint[ NOT VALID ] VALIDATE CONSTRAINTconstraint_nameDROP CONSTRAINT [ IF EXISTS ]constraint_name[ RESTRICT | CASCADE ] DISABLE TRIGGER [trigger_name| ALL | USER ] ENABLE TRIGGER [trigger_name| ALL | USER ] ENABLE REPLICA TRIGGERtrigger_nameENABLE ALWAYS TRIGGERtrigger_nameSET WITHOUT OIDS INHERITparent_tableNO INHERITparent_tableOWNER TO {new_owner| CURRENT_ROLE | CURRENT_USER | SESSION_USER } OPTIONS ( [ ADD | SET | DROP ]option['value'] [, ... ])
ALTER FOREIGN TABLE cambia la definición de una
tabla foránea existente. Existen varias variantes:
ADD [ COLUMN ] [ IF NOT EXISTS ]
Esta forma agrega una nueva columna a la tabla foránea, utilizando la misma sintaxis que
CREATE FOREIGN TABLE.
Si se especifica IF NOT EXISTS y ya existe una columna
con este nombre, no se lanza ningún error.
A diferencia de lo que ocurre al agregar una columna a una tabla común, no sucede nada
con el almacenamiento subyacente: esta acción simplemente declara que
una nueva columna es ahora accesible a través de la tabla foránea.
DROP [ COLUMN ] [ IF EXISTS ]
Esta forma elimina una columna de una tabla foránea.
Deberás indicar CASCADE si
algo fuera de la tabla depende de la columna; por ejemplo,
vistas.
Si se especifica IF EXISTS y la columna
no existe, no se lanza ningún error. En este caso se emite un aviso (notice)
en su lugar.
SET DATA TYPEEsta forma cambia el tipo de una columna de una tabla foránea. Nuevamente, esto no tiene efecto en ningún almacenamiento subyacente: esta acción simplemente cambia el tipo que PostgreSQL cree que tiene la columna.
SET/DROP DEFAULT
Estas formas establecen o eliminan el valor predeterminado para una columna.
Los valores predeterminados solo se aplican en los comandos INSERT
o UPDATE posteriores; no hacen que cambien las filas que ya
están en la tabla.
SET/DROP NOT NULLMarca una columna para permitir, o no permitir, valores nulos.
SET STATISTICS
Esta forma establece el objetivo de recopilación de estadísticas por columna para
operaciones ANALYZE posteriores.
Consulta la forma similar de ALTER TABLE
para obtener más detalles.
SET ( attribute_option = value [, ... ] )RESET ( attribute_option [, ... ] )
Esta forma establece o restablece opciones por atributo.
Consulta la forma similar de ALTER TABLE
para obtener más detalles.
SET STORAGE
Esta forma establece el modo de almacenamiento para una columna.
Consulta la forma similar de ALTER TABLE
para obtener más detalles.
Ten en cuenta que el modo de almacenamiento no tiene efecto a menos que el
envolvedor de datos externos de la tabla decida prestarle atención.
ADD table_constraint [ NOT VALID ]
Esta forma agrega una nueva restricción a una tabla foránea, utilizando la misma
sintaxis que CREATE FOREIGN TABLE.
Actualmente solo se admiten restricciones CHECK y NOT NULL.
A diferencia de lo que ocurre al agregar una restricción a una tabla normal, no se
hace nada para verificar que la restricción sea correcta; en cambio, esta acción simplemente
declara que se debe asumir que se cumple alguna nueva condición para todas las filas
de la tabla foránea (ver la discusión en CREATE FOREIGN TABLE).
Si la restricción se marca como NOT VALID (permitido solo para el
caso de CHECK), entonces no se asume que se cumpla,
sino que solo se registra para un posible uso futuro.
VALIDATE CONSTRAINT
Esta forma marca como válida una restricción que previamente estaba marcada
como NOT VALID. No se toma ninguna acción para verificar la
restricción, pero las consultas futuras asumirán que se cumple.
DROP CONSTRAINT [ IF EXISTS ]
Esta forma elimina la restricción especificada en una tabla foránea.
Si se especifica IF EXISTS y la restricción
no existe, no se lanza ningún error.
En este caso se emite un aviso (notice) en su lugar.
DISABLE/ENABLE [ REPLICA | ALWAYS ] TRIGGER
Estas formas configuran la ejecución de los disparadores (triggers) que pertenecen a la tabla
foránea. Consulta la forma similar de ALTER TABLE para obtener
más detalles.
SET WITHOUT OIDS
Sintaxis de compatibilidad hacia atrás para eliminar la columna del sistema oid.
Dado que las columnas del sistema oid ya no se pueden agregar,
esto nunca tiene efecto.
INHERIT parent_table
Esta forma agrega la tabla foránea objetivo como un nuevo hijo de la tabla
padre especificada.
Consulta la forma similar de ALTER TABLE
para obtener más detalles.
NO INHERIT parent_tableEsta forma elimina la tabla foránea objetivo de la lista de hijos de la tabla padre especificada.
OWNEREsta forma cambia el propietario de la tabla foránea al usuario especificado.
OPTIONS ( [ ADD | SET | DROP ] option ['value'] [, ... ] )
Cambia las opciones de la tabla foránea o de una de sus columnas.
ADD, SET y DROP
especifican la acción a realizar. Se asume ADD si no se
especifica explícitamente ninguna operación. No se permiten nombres de opciones
duplicados (aunque no hay problema en que una opción de tabla y una opción de columna tengan
el mismo nombre). Los nombres y valores de las opciones también se validan utilizando la
biblioteca del envolvedor de datos externos.
RENAME
Las formas de RENAME cambian el nombre de una tabla foránea
o el nombre de una columna individual en una tabla foránea.
SET SCHEMAEsta forma mueve la tabla foránea a otro esquema.
Todas las acciones excepto RENAME y SET SCHEMA
se pueden combinar en una lista de múltiples modificaciones para aplicar en paralelo.
Por ejemplo, es posible agregar varias columnas y/o alterar el tipo de varias
columnas en un solo comando.
Si el comando se escribe como ALTER FOREIGN TABLE IF EXISTS ...
y la tabla foránea no existe, no se lanza ningún error. Se emite un aviso (notice)
en este caso.
Debes ser el propietario de la tabla para usar ALTER FOREIGN TABLE.
Para cambiar el esquema de una tabla foránea, también debes tener el privilegio
CREATE en el nuevo esquema.
Para alterar el propietario, debes poder hacer SET ROLE al
nuevo rol propietario, y ese rol debe tener el privilegio CREATE
en el esquema de la tabla. (Estas restricciones garantizan que al cambiar el propietario
no puedas hacer nada que no pudieras hacer eliminando y recreando la tabla.
Sin embargo, un superusuario puede cambiar la propiedad de cualquier tabla de todos modos).
Para agregar una columna o alterar el tipo de una columna, también debes tener el
privilegio USAGE en el tipo de datos.
name
El nombre (posiblemente calificado por esquema) de una tabla foránea existente a
modificar. Si se especifica ONLY antes del nombre de la tabla, solo
se modifica esa tabla. Si no se especifica ONLY, se modifica la tabla
y todas sus tablas descendientes (si las hay). Opcionalmente, se puede especificar
* después del nombre de la tabla para indicar explícitamente
que se incluyen las tablas descendientes.
column_nameNombre de una columna nueva o existente.
new_column_nameNuevo nombre para una columna existente.
new_nameNuevo nombre para la tabla.
data_typeTipo de datos de la nueva columna, o nuevo tipo de datos para una columna existente.
table_constraintNueva restricción de tabla para la tabla foránea.
constraint_nameNombre de una restricción existente a eliminar.
CASCADEEliminar automáticamente los objetos que dependen de la columna o restricción eliminada (por ejemplo, vistas que hacen referencia a la columna) y, a su vez, todos los objetos que dependen de esos objetos (ver Section 5.15).
RESTRICTRechazar la eliminación de la columna o restricción si existen objetos dependientes. Este es el comportamiento predeterminado.
trigger_nameNombre de un solo disparador (trigger) a desactivar o activar.
ALLDesactivar o activar todos los disparadores que pertenecen a la tabla foránea. (Esto requiere el privilegio de superusuario si alguno de los disparadores es generado internamente. El sistema central no agrega tales disparadores a las tablas foráneas, pero el código complementario podría hacerlo).
USERDesactivar o activar todos los disparadores que pertenecen a la tabla foránea, excepto los disparadores generados internamente.
parent_tableUna tabla padre para asociar o desasociar con esta tabla foránea.
new_ownerEl nombre de usuario del nuevo propietario de la tabla.
new_schemaEl nombre del esquema al que se moverá la tabla.
La palabra clave COLUMN es ruido sintáctico y se puede omitir.
No se comprueba la coherencia con el servidor foráneo cuando se agrega o elimina una columna
con ADD COLUMN o DROP COLUMN, cuando se agrega una
restricción NOT NULL o CHECK, o cuando se cambia el
tipo de una columna con SET DATA TYPE. Es responsabilidad del usuario asegurarse
de que la definición de la tabla coincida con el lado remoto.
Consulta CREATE FOREIGN TABLE para obtener una descripción más detallada
de los parámetros válidos.
Para marcar una columna como no nula:
ALTER FOREIGN TABLE distributors ALTER COLUMN street SET NOT NULL;
Para cambiar las opciones de una tabla foránea:
ALTER FOREIGN TABLE myschema.distributors OPTIONS (ADD opt1 'value', SET opt2 'value2', DROP opt3);
Las formas ADD, DROP y SET DATA TYPE
cumplen con el estándar SQL. Las otras formas son extensiones de
PostgreSQL del estándar SQL. Además, la capacidad de especificar más de una
manipulación en un solo comando ALTER FOREIGN TABLE es una extensión.
ALTER FOREIGN TABLE DROP COLUMN se puede utilizar para eliminar la única
columna de una tabla foránea, dejando una tabla con cero columnas. Esta es una
extensión de SQL, el cual no permite tablas foráneas de cero columnas.