ALTER FOREIGN TABLE

ALTER FOREIGN TABLE — cambiar la definición de una tabla foránea

Synopsis

ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ] name [ * ]
    action [, ... ]
ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ] name [ * ]
    RENAME [ COLUMN ] column_name TO new_column_name
ALTER FOREIGN TABLE [ IF EXISTS ] name
    RENAME TO new_name
ALTER FOREIGN TABLE [ IF EXISTS ] name
    SET SCHEMA new_schema

donde action puede ser uno de los siguientes:

    ADD [ COLUMN ] [ IF NOT EXISTS ] column_name data_type [ COLLATE collation ] [ column_constraint [ ... ] ]
    DROP [ COLUMN ] [ IF EXISTS ] column_name [ RESTRICT | CASCADE ]
    ALTER [ COLUMN ] column_name [ SET DATA ] TYPE data_type [ COLLATE collation ]
    ALTER [ COLUMN ] column_name SET DEFAULT expression
    ALTER [ COLUMN ] column_name DROP DEFAULT
    ALTER [ COLUMN ] column_name { SET | DROP } NOT NULL
    ALTER [ COLUMN ] column_name SET STATISTICS integer
    ALTER [ COLUMN ] column_name SET ( attribute_option = value [, ... ] )
    ALTER [ COLUMN ] column_name RESET ( attribute_option [, ... ] )
    ALTER [ COLUMN ] column_name SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT }
    ALTER [ COLUMN ] column_name OPTIONS ( [ ADD | SET | DROP ] option ['value'] [, ... ])
    ADD table_constraint [ NOT VALID ]
    VALIDATE CONSTRAINT constraint_name
    DROP CONSTRAINT [ IF EXISTS ]  constraint_name [ RESTRICT | CASCADE ]
    DISABLE TRIGGER [ trigger_name | ALL | USER ]
    ENABLE TRIGGER [ trigger_name | ALL | USER ]
    ENABLE REPLICA TRIGGER trigger_name
    ENABLE ALWAYS TRIGGER trigger_name
    SET WITHOUT OIDS
    INHERIT parent_table
    NO INHERIT parent_table
    OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
    OPTIONS ( [ ADD | SET | DROP ] option ['value'] [, ... ])

Descripción

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 TYPE

Esta 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 NULL

Marca 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_table

Esta forma elimina la tabla foránea objetivo de la lista de hijos de la tabla padre especificada.

OWNER

Esta 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 SCHEMA

Esta 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.

Parámetros

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_name

Nombre de una columna nueva o existente.

new_column_name

Nuevo nombre para una columna existente.

new_name

Nuevo nombre para la tabla.

data_type

Tipo de datos de la nueva columna, o nuevo tipo de datos para una columna existente.

table_constraint

Nueva restricción de tabla para la tabla foránea.

constraint_name

Nombre de una restricción existente a eliminar.

CASCADE

Eliminar 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).

RESTRICT

Rechazar la eliminación de la columna o restricción si existen objetos dependientes. Este es el comportamiento predeterminado.

trigger_name

Nombre de un solo disparador (trigger) a desactivar o activar.

ALL

Desactivar 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).

USER

Desactivar o activar todos los disparadores que pertenecen a la tabla foránea, excepto los disparadores generados internamente.

parent_table

Una tabla padre para asociar o desasociar con esta tabla foránea.

new_owner

El nombre de usuario del nuevo propietario de la tabla.

new_schema

El nombre del esquema al que se moverá la tabla.

Notas

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.

Ejemplos

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);

Compatibilidad

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.

Véase también

CREATE FOREIGN TABLE, DROP FOREIGN TABLE