Estamos fazendo uma replicação lógica nativa do Postgres entre dois bancos de dados.
Agora, estamos recebendo um erro ao tentar atualizar do editor uma das mil tabelas que temos.
Quando tentamos atualizar a tabela ele retorna este erro:
ERRO: Lista de colunas utilizada pela publicação não cobre a identidade da réplica. Não é possível atualizar a tabela "etiquetas_j".
ERRO: não é possível atualizar a tabela "etiquetas_j" Estado SQL: 42P10 Detalle: A lista de colunas utilizada pela publicação não cobre a identidade da réplica.
A definição da tabela, tipos de dados, índices e pkeys são os mesmos no editor e no assinante
Veja aqui:
Editora :
CREATE TABLE IF NOT EXISTS public.etiquetas_j (
etiqueta_id integer NOT NULL,
fecha timestamp without time zone,
j_id integer NOT NULL,
usuario_del_id integer,
usuario_mod_id integer,
organigrama_mod character varying(2) COLLATE pg_catalog."default",
id integer NOT NULL DEFAULT nextval('etiquetas_j_id_seq1'::regclass),
CONSTRAINT etiquetas_j_pkey PRIMARY KEY (id))
TABLESPACE pg_default; ALTER TABLE IF EXISTS public.etiquetas_j
OWNER to postgres;
CREATE INDEX IF NOT EXISTS etiquetas_j_etiqueta_id_idx
ON public.etiquetas_j USING btree
(etiqueta_id ASC NULLS LAST)
TABLESPACE pg_default;
CREATE INDEX IF NOT EXISTS etiquetas_j_id_idx
ON public.etiquetas_j USING btree
(j_id ASC NULLS LAST)
TABLESPACE pg_default;
Assinante :
CREATE TABLE IF NOT EXISTS public.etiquetas_j
(
etiqueta_id integer NOT NULL,
fecha timestamp without time zone,
j_id integer NOT NULL,
usuario_del_id integer,
usuario_mod_id integer,
organigrama_mod character varying(2) COLLATE pg_catalog."default",
id integer NOT NULL DEFAULT nextval('etiquetas_j_id_seq1'::regclass),
CONSTRAINT etiquetas_j_pkey PRIMARY KEY (id)
)
TABLESPACE pg_default;
ALTER TABLE IF EXISTS public.etiquetas_j
OWNER to postgres;
CREATE INDEX IF NOT EXISTS etiquetas_j_etiqueta_id_idx
ON public.etiquetas_j USING btree
(etiqueta_id ASC NULLS LAST)
TABLESPACE pg_default;
CREATE INDEX IF NOT EXISTS etiquetas_j_id_idx
ON public.etiquetas_j USING btree
(j_id ASC NULLS LAST)
TABLESPACE pg_default;
A publicação é definida da seguinte forma:
CREATE PUBLICATION publication_visor FOR TABLE etiquetas_j(
etiqueta_id,
fecha,
j_id,
usuario_del_id,
usuario_mod_id ,
organigrama_mod,
id)
O erro ocorre quando executamos no provedor:
update etiquetas_j set organigrama_mod = '02' where id = 3;
Obrigado e desculpe pelo mau inglês!
Já verificamos:
- Veja quais são os índices.
- Veja o que difere nos dois esquemas.
- Veja o que o editor estava enviando na criação da publicação.
- Aplicado ALTER TABLE etiquetas_j REPLICA IDENTITY FULL;