On Wed, 7 Apr 2021 at 07:48, Ruben Fitó <r.f...@ubiquat.com> wrote: > On Wed, Apr 07, 2021 at 08:50:00AM +0200, Ruben Fitó wrote: > > Tenemos una infraestructura de bases de datos donde disponemos de una > > replicación lógica en cascada: > > > > [master] -> LR -> [esclavo 1] -> LR -> [esclavo 2] > > > > Ahora nos vemos en la necesidad de hacer un ALTER COLUMN en una de las > > tablas. > > > > Cómo deberíamos proceder para que no se pierdan datos y no se pare la > > sincronización?
Detener los DML (INSERT/UPDATE/DELETE)? si, por favor. estás usando pglogical o replicación lógica nativa? si es pglogical podrías usar pglogical.replicate_ddl_command() para hacer el cambio, esa función debería encargarse de hacer el cambio en todos los nodos. Si es replicación lógica nativa, entonces si haz los cambios como sugieres. > > Se me olvidó decir que el ALTER COLUMN es para hacer un cambio de tipo de > dato de una columna. > > El cambio deseado sería pasar de un numeric(10, 0) a varchar(21). > por qué varchar(21) y no text? cuando pones estas restricciones de tamaño arbitrarias es posible que luego te veas nuevamente cambiando el tipo de datos, ya tuviste que pasar de numeric(10,0) a varchar(21)! yo me aseguraría de tenerlo bien esta vez... o simplemente cambiar a text y agregar un constraint check (char_length(campo)=21) > > All information contained in this document and any attachments are > CONFIDENTIAL and protected under trade secret laws. If you receive this > message by mistake, please delete it and notify it immediately to the > sender. Esta es una lista pública, al enviar un correo a esta lista aceptaste que la información que enviaste se enviará a todos los suscriptores actuales de la lista y que permanecerá pública en múltiples sitios de archivado en internet, principalmente pero no limitado a: archi...@postgresql.org -- Jaime Casanova Director de Servicios Profesionales SystemGuards - Consultores de PostgreSQL