ADD COLUMN
Esta forma añade una nueva columna a la tabla, utilizando la misma sintaxis que CREATE TABLE.
DROP COLUMN
Esta forma elimina una columna de una tabla. Los índices y las restricciones de la tabla que afectan a la columna también se eliminarán automáticamente. Tendrá que decir CASCADE si algo fuera de la tabla depende de la columna, por ejemplo, referencias de clave externa o vistas. Si se especifica IF EXISTS y la columna no existe, no se produce ningún error. En este caso se emite un aviso en su lugar.
SET DATA TYPE
Esta forma cambia el tipo de una columna de una tabla. Los índices y las restricciones simples de la tabla que implican la columna se convertirán automáticamente para utilizar el nuevo tipo de columna reparando la expresión suministrada originalmente. La cláusula opcional COLLATE especifica una colación para la nueva columna; si se omite, la colación es la predeterminada para el nuevo tipo de columna. La cláusula opcional USING especifica cómo calcular el valor de la nueva columna a partir de la antigua; si se omite, la conversión por defecto es la misma que un reparto de asignación del tipo de datos antiguo al nuevo. Debe proporcionarse una cláusula USING si no hay un reparto implícito o de asignación del tipo antiguo al nuevo.
SET/DROP DEFAULT
Estas formas establecen o eliminan el valor por defecto de una columna. Los valores por defecto sólo se aplican a los comandos INSERT subsiguientes; no hacen que cambien las filas que ya están en la tabla. Los valores por defecto también se pueden crear para las vistas, en cuyo caso se insertan en las sentencias INSERT de la vista antes de que se aplique la regla ON INSERT de la vista.
SET/DROP NOT NULL
Estos formularios cambian si una columna está marcada para permitir valores nulos o para rechazar valores nulos. Sólo se puede utilizar SET NOT NULL cuando la columna no contiene valores nulos.
SET STATISTICS
Este formulario establece el objetivo de recopilación de estadísticas por columna para las siguientes operaciones ANALYZE. El objetivo puede establecerse en el rango de 0 a 10000; alternativamente, establézcalo en -1 para volver a utilizar el objetivo de estadísticas por defecto del sistema (default_statistics_target). Para más información sobre el uso de estadísticas por parte del planificador de consultas de PostgreSQL, consulte la Sección 14.2.
SET ( attribute_option = value )
RESET ( attribute_option )
Esta forma establece o restablece opciones por atributo. Actualmente, las únicas opciones por atributo definidas son n_distinct y n_distinct_inherited, que anulan las estimaciones del número de valores distintos realizadas por las operaciones ANALYZE posteriores. n_distinct afecta a las estadísticas de la propia tabla, mientras que n_distinct_inherited afecta a las estadísticas recopiladas para la tabla más sus hijos de herencia. Cuando se establece un valor positivo, ANALYZE asumirá que la columna contiene exactamente el número especificado de valores distintos no nulos. Cuando se establece un valor negativo, que debe ser mayor o igual a -1, ANALYZE asumirá que el número de valores distintos no nulos en la columna es lineal en el tamaño de la tabla; el recuento exacto se calculará multiplicando el tamaño estimado de la tabla por el valor absoluto del número dado. Por ejemplo, un valor de -1 implica que todos los valores de la columna son distintos, mientras que un valor de -0,5 implica que cada valor aparece dos veces en la media. Esto puede ser útil cuando el tamaño de la tabla cambia con el tiempo, ya que la multiplicación por el número de filas de la tabla no se realiza hasta el momento de la planificación de la consulta. Especifique un valor de 0 para volver a estimar el número de valores distintos normalmente. Para más información sobre el uso de estadísticas por parte del planificador de consultas de PostgreSQL, consulte la Sección 14.2.
SET STORAGE
Esta forma establece el modo de almacenamiento para una columna. Esto controla si esta columna se mantiene en línea o en una tabla secundaria TOAST, y si los datos deben ser comprimidos o no. PLAIN debe usarse para valores de longitud fija como los enteros y es inline, sin comprimir. MAIN es para datos en línea, comprimibles. EXTERNAL es para datos externos, no comprimidos, y EXTENDED es para datos externos, comprimidos. EXTENDED es el valor por defecto para la mayoría de los tipos de datos que soportan el almacenamiento no-PLAIN. El uso de EXTERNAL hará que las operaciones de subcadena en valores de texto y bytea muy grandes se ejecuten más rápidamente, a costa de un mayor espacio de almacenamiento. Tenga en cuenta que SET STORAGE no cambia nada en la tabla, sólo establece la estrategia a seguir durante futuras actualizaciones de la tabla. Consulte la sección 55.2 para obtener más información.
ADD table_constraint
Esta forma añade una nueva restricción a una tabla utilizando la misma sintaxis que CREATE TABLE, más la opción NOT VALID, que actualmente sólo se permite para las restricciones de clave externa. Si la restricción se marca como NO VÁLIDA, se omite la potencialmente larga comprobación inicial para verificar que todas las filas de la tabla satisfacen la restricción. La restricción se seguirá aplicando a las subsiguientes inserciones o actualizaciones (es decir, fallarán a menos que haya una fila que coincida en la tabla referenciada). Pero la base de datos no asumirá que la restricción es válida para todas las filas de la tabla, hasta que se valide utilizando la opción VALIDATE CONSTRAINT.
ADD table_constraint_using_index
Esta forma añade una nueva restricción PRIMARY KEY o UNIQUE a una tabla basada en un índice único existente. Todas las columnas del índice se incluirán en la restricción.
El índice no puede tener columnas de expresión ni ser un índice parcial. Además, debe ser un índice de árbol b con ordenación por defecto. Estas restricciones aseguran que el índice es equivalente a uno que sería construido por un comando regular ADD PRIMARY KEY o ADD UNIQUE.
Si se especifica PRIMARY KEY, y las columnas del índice no están ya marcadas como NOT NULL, entonces este comando intentará hacer ALTER COLUMN SET NOT NULL contra cada una de dichas columnas. Esto requiere un escaneo completo de la tabla para verificar que la(s) columna(s) no contiene(n) nulos. En todos los demás casos, esta es una operación rápida.
Si se proporciona un nombre de restricción entonces el índice será renombrado para que coincida con el nombre de la restricción. De lo contrario, la restricción recibirá el mismo nombre que el índice.
Después de ejecutar este comando, el índice es «propiedad» de la restricción, de la misma manera que si el índice se hubiera construido mediante un comando regular ADD PRIMARY KEY o ADD UNIQUE. En particular, la eliminación de la restricción hará que el índice desaparezca también.
Nota: Añadir una restricción utilizando un índice existente puede ser útil en situaciones en las que se necesita añadir una nueva restricción sin bloquear las actualizaciones de la tabla durante mucho tiempo. Para ello, cree el índice mediante CREATE INDEX CONCURRENTLY y, a continuación, instálelo como una restricción oficial mediante esta sintaxis. Vea el ejemplo siguiente.
VALIDAR CONSTRAINT
Esta forma valida una restricción de clave foránea que fue creada previamente como NO VÁLIDA, escaneando la tabla para asegurarse de que no hay filas no coincidentes. No ocurre nada si la restricción ya está marcada como válida.
La validación puede ser un proceso largo en tablas grandes y actualmente requiere un bloqueo de ACCESO EXCLUSIVO. El valor de separar la validación de la creación inicial es que se puede diferir la validación a tiempos menos ocupados, o se puede utilizar para dar tiempo adicional para corregir los errores preexistentes, mientras que la prevención de nuevos errores.
DROP CONSTRAINT
Esta forma elimina la restricción especificada en una tabla. Si se especifica IF EXISTS y la restricción no existe, no se lanza ningún error. En este caso se emite un aviso en su lugar.
DISABLE/ENABLE TRIGGER
Estos formularios configuran el disparo de trigger(s) pertenecientes a la tabla. Un trigger deshabilitado sigue siendo conocido por el sistema, pero no se ejecuta cuando se produce su evento desencadenante. En el caso de un disparador diferido, el estado de habilitación se comprueba cuando se produce el evento, no cuando se ejecuta realmente la función de disparo. Se puede deshabilitar o habilitar un único disparador especificado por su nombre, o todos los disparadores de la tabla, o sólo los disparadores de usuario (esta opción excluye los disparadores de restricciones generados internamente, como los que se utilizan para implementar las restricciones de clave externa o las restricciones de unicidad y exclusión aplazables). Desactivar o activar los desencadenantes de restricciones generados internamente requiere privilegios de superusuario; debe hacerse con precaución ya que, por supuesto, la integridad de la restricción no puede garantizarse si los desencadenantes no se ejecutan. El mecanismo de disparo también se ve afectado por la variable de configuración session_replication_role. Los disparadores simplemente habilitados se dispararán cuando el rol de replicación sea «origen» (el predeterminado) o «local». Los disparadores configurados como ENABLE REPLICA sólo se dispararán si la sesión está en modo «réplica», y los disparadores configurados como ENABLE ALWAYS se dispararán independientemente del modo de replicación actual.
DISABLE/ENABLE RULE
Estas formas configuran el disparo de las reglas de reescritura pertenecientes a la tabla. Una regla deshabilitada sigue siendo conocida por el sistema, pero no se aplica durante la reescritura de la consulta. La semántica es la misma que para los activadores desactivados/activados. Esta configuración se ignora para las reglas ON SELECT, que siempre se aplican para que las vistas sigan funcionando aunque la sesión actual esté en un rol de replicación no predeterminado.
CLUSTER
Esta forma selecciona el índice predeterminado para futuras operaciones de CLUSTER. En realidad, no vuelve a agrupar la tabla.
SET WITHOUT CLUSTER
Esta forma elimina la especificación del índice CLUSTER utilizado más recientemente de la tabla. Esto afecta a futuras operaciones de cluster que no especifiquen un índice.
SET WITH OIDS
Esta forma añade una columna de sistema oid a la tabla (ver Sección 5.4). No hace nada si la tabla ya tiene OIDs.
Nótese que esto no es equivalente a ADD COLUMN oid oid; eso añadiría una columna normal que pasara a llamarse oid, no una columna de sistema.
SET WITHOUT OIDS
Esta forma elimina la columna de sistema oid de la tabla. Esto es exactamente equivalente a DROP COLUMN oid RESTRICT, excepto que no se quejará si ya no hay una columna oid.
SET ( storage_parameter = value )
Esta forma cambia uno o más parámetros de almacenamiento para la tabla. Consulte Parámetros de almacenamiento para obtener detalles sobre los parámetros disponibles. Tenga en cuenta que el contenido de la tabla no se modificará inmediatamente con este comando; dependiendo del parámetro, es posible que tenga que reescribir la tabla para obtener los efectos deseados. Eso puede hacerse con VACUUM FULL, CLUSTER o una de las formas de ALTER TABLE que fuerzan una reescritura de la tabla.
Nota: Mientras que CREATE TABLE permite especificar OIDS en la sintaxis WITH (storage_parameter), ALTER TABLE no trata OIDS como un parámetro de almacenamiento. En su lugar, utilice las formas SET WITH OIDS y SET WITHOUT OIDS para cambiar el estado del OID.
RESET ( storage_parameter )
Esta forma restablece uno o más parámetros de almacenamiento a sus valores predeterminados. Al igual que con SET, podría ser necesaria una reescritura de la tabla para actualizarla por completo.
INHERIT parent_table
Esta forma añade la tabla de destino como un nuevo hijo de la tabla padre especificada. Posteriormente, las consultas contra el padre incluirán registros de la tabla de destino. Para ser añadida como hija, la tabla destino debe contener todas las mismas columnas que el padre (también puede tener columnas adicionales). Las columnas deben tener tipos de datos que coincidan, y si tienen restricciones NOT NULL en el padre, también deben tener restricciones NOT NULL en el hijo.
También debe haber restricciones de la tabla hijo que coincidan con todas las restricciones CHECK del padre. Actualmente no se consideran las restricciones UNIQUE, PRIMARY KEY y FOREIGN KEY, pero esto podría cambiar en el futuro.
NO INHERIT parent_table
Esta forma elimina la tabla destino de la lista de hijos de la tabla padre especificada. Las consultas contra la tabla padre ya no incluirán registros extraídos de la tabla objetivo.
OF type_name
Esta forma vincula la tabla a un tipo compuesto como si CREATE TABLE OF la hubiera formado. La lista de nombres y tipos de columnas de la tabla debe coincidir exactamente con la del tipo compuesto; se permite que la presencia de una columna del sistema oid sea diferente. La tabla no debe heredar de ninguna otra tabla. Estas restricciones aseguran que CREATE TABLE OF permitiría una definición de tabla equivalente.
NOT OF
Esta forma disocia una tabla tipificada de su tipo.
OWNER
Esta forma cambia el propietario de la tabla, secuencia o vista al usuario especificado.
SET TABLESPACE
Esta forma cambia el tablespace de la tabla al tablespace especificado y mueve el(los) archivo(s) de datos asociados a la tabla al nuevo tablespace. Los índices de la tabla, si los hay, no se mueven; pero se pueden mover por separado con comandos adicionales de SET TABLESPACE. Ver también CREATE TABLESPACE.
RENAME
Las formas RENAME cambian el nombre de una tabla (o un índice, secuencia o vista) o el nombre de una columna individual en una tabla. No hay ningún efecto sobre los datos almacenados.
SET SCHEMA
Esta forma mueve la tabla a otro esquema. Los índices asociados, las restricciones y las secuencias pertenecientes a las columnas de la tabla también se mueven.