ALTER PUBLICATION

ALTER PUBLICATION — cambiar la definición de una publicación

Synopsis

ALTER PUBLICATION name ADD publication_object [, ...]
ALTER PUBLICATION name SET publication_object [, ...]
ALTER PUBLICATION name DROP publication_drop_object [, ...]
ALTER PUBLICATION name SET ( publication_parameter [= value] [, ... ] )
ALTER PUBLICATION name OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
ALTER PUBLICATION name RENAME TO new_name

donde publication_object es uno de:

    TABLE table_and_columns [, ... ]
    TABLES IN SCHEMA { schema_name | CURRENT_SCHEMA } [, ... ]

y publication_drop_object es uno de:

    TABLE [ ONLY ] table_name [ * ] [, ... ]
    TABLES IN SCHEMA { schema_name | CURRENT_SCHEMA } [, ... ]

y table_and_columns es:

    [ ONLY ] table_name [ * ] [ ( column_name [, ... ] ) ] [ WHERE ( expression ) ]

Descripción

El comando ALTER PUBLICATION puede cambiar los atributos de una publicación.

Las tres primeras variantes cambian qué tablas/esquemas forman parte de la publicación. La cláusula SET reemplazará la lista de tablas/esquemas en la publicación con la lista especificada; se eliminarán las tablas/esquemas existentes que estaban presentes en la publicación. Las cláusulas ADD y DROP agregarán y eliminarán una o más tablas/esquemas de la publicación. Ten en cuenta que agregar tablas/esquemas a una publicación a la que ya se está suscrito requerirá una acción ALTER SUBSCRIPTION ... REFRESH PUBLICATION en el lado del suscriptor para que surta efecto. Ten en cuenta también que DROP TABLES IN SCHEMA no eliminará ninguna tabla del esquema que se haya especificado utilizando FOR TABLE/ ADD TABLE.

La cuarta variante de este comando listada en la sinopsis puede cambiar todas las propiedades de la publicación especificadas en CREATE PUBLICATION. Las propiedades que no se mencionan en el comando conservan su configuración anterior.

Las variantes restantes cambian el propietario y el nombre de la publicación.

Debes ser el propietario de la publicación para usar ALTER PUBLICATION. Agregar una tabla a una publicación requiere además ser el propietario de esa tabla. Las cláusulas ADD TABLES IN SCHEMA y SET TABLES IN SCHEMA en una publicación requieren que el usuario que lo invoque sea un superusuario. Para cambiar el propietario, debes ser capaz de hacer SET ROLE al nuevo rol propietario, y ese rol debe tener el privilegio CREATE en la base de datos. Además, el nuevo propietario de una publicación FOR ALL TABLES o FOR TABLES IN SCHEMA debe ser un superusuario. Sin embargo, un superusuario puede cambiar la propiedad de una publicación independientemente de estas restricciones.

No se admite agregar/configurar ningún esquema cuando la publicación también publica una tabla con una lista de columnas, y viceversa.

Parámetros

name

El nombre de una publicación existente cuya definición se va a modificar.

table_name

El nombre de una tabla existente. Si se especifica ONLY antes del nombre de la tabla, solo esa tabla se ve afectada. Si no se especifica ONLY, la tabla y todas sus tablas descendientes (si las hay) se ven afectadas. Opcionalmente, se puede especificar * después del nombre de la tabla para indicar explícitamente que se incluyen las tablas descendientes.

Opcionalmente, se puede especificar una lista de columnas. Consulta CREATE PUBLICATION para obtener más detalles. Ten en cuenta que no se admite una suscripción que tenga varias publicaciones en las que la misma tabla se haya publicado con diferentes listas de columnas. Consulta Warning: Combining Column Lists from Multiple Publications para ver los detalles de los problemas potenciales al modificar las listas de columnas.

Si se especifica la cláusula opcional WHERE, las filas para las cuales la expression se evalúa como false o null no se publicarán. Ten en cuenta que se requieren paréntesis alrededor de la expresión. La expression se evalúa con el rol utilizado para la conexión de replicación.

schema_name

El nombre de un esquema existente.

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

Esta cláusula modifica los parámetros de la publicación establecidos originalmente por CREATE PUBLICATION. Consulta allí para obtener más información.

Caution

Modificar el parámetro publish_via_partition_root puede provocar pérdida o duplicación de datos en el suscriptor porque cambia la identidad y el esquema de las tablas publicadas. Ten en cuenta que esto sucede solo cuando se especifica una tabla raíz de partición como destino de replicación.

Este problema se puede evitar absteniéndose de modificar las tablas de partición hoja después del comando ALTER PUBLICATION ... SET hasta que se ejecute ALTER SUBSCRIPTION ... REFRESH PUBLICATION y realizando la actualización únicamente con la opción copy_data = off.

new_owner

El nombre de usuario del nuevo propietario de la publicación.

new_name

El nuevo nombre para la publicación.

Ejemplos

Cambiar la publicación para publicar solo eliminaciones y actualizaciones:

ALTER PUBLICATION noinsert SET (publish = 'update, delete');

Agregar algunas tablas a la publicación:

ALTER PUBLICATION mypublication ADD TABLE users (user_id, firstname), departments;

Cambiar el conjunto de columnas publicadas para una tabla:

ALTER PUBLICATION mypublication SET TABLE users (user_id, firstname, lastname), TABLE departments;

Agregar los esquemas marketing y sales a la publicación sales_publication:

ALTER PUBLICATION sales_publication ADD TABLES IN SCHEMA marketing, sales;

Agregar las tablas users, departments y el esquema production a la publicación production_publication:

ALTER PUBLICATION production_publication ADD TABLE users, departments, TABLES IN SCHEMA production;

Compatibilidad

ALTER PUBLICATION es una extensión de PostgreSQL.

Véase también

CREATE PUBLICATION, DROP PUBLICATION, CREATE SUBSCRIPTION, ALTER SUBSCRIPTION