Re: [BUG] Crash of logical replica with trigger.
От | Masahiko Sawada |
---|---|
Тема | Re: [BUG] Crash of logical replica with trigger. |
Дата | |
Msg-id | CAD21AoAzT_78aDoLZKizwcm_f2yidrE_1HKJqktkYDnFaYw1sQ@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: [BUG] Crash of logical replica with trigger. (Masahiko Sawada <sawada.mshk@gmail.com>) |
Ответы |
Re: [BUG] Crash of logical replica with trigger.
|
Список | pgsql-bugs |
On Wed, Sep 28, 2022 at 10:33 PM Masahiko Sawada <sawada.mshk@gmail.com> wrote: > > Hi, > > On Mon, Aug 15, 2022 at 4:48 AM Anton A. Melnikov <aamelnikov@inbox.ru> wrote: > > > > Hello! > > > > There is a crash during logical replication. > > > > Reproduction on current master: > > A) on master (wal_level = logical): create table rul_rule_set that will be replicated: > > CREATE TABLE public.rul_rule_set (id smallint NOT NULL, description text, stage_id integer, > > condition text, condition_compiled text); > > ALTER TABLE ONLY public.rul_rule_set ADD CONSTRAINT rul_rule_set_pkey PRIMARY KEY (id); > > CREATE PUBLICATION test_pub FOR TABLE rul_rule_set; > > > > B) on replica > > 1. Create tables doc_attribute and rul_rule_set for incoming changes: > > CREATE TABLE public.doc_attribute (id integer NOT NULL, attr_name text, attr_desc text, attr_type text, > > attr_order integer, is_system boolean, used_by_slice boolean); > > INSERT INTO doc_attribute VALUES ('1','name','Имя','text','1','t','t'); > > CREATE TABLE public.rul_rule_set (id smallint NOT NULL, description text, stage_id integer, > > condition text, condition_compiled text); > > ALTER TABLE ONLY public.doc_attribute ADD CONSTRAINT doc_attribute_pkey PRIMARY KEY (id); > > ALTER TABLE ONLY public.rul_rule_set ADD CONSTRAINT rul_rule_set_pkey PRIMARY KEY (id); > > > > 2.Create procedure and trigger that will be fired on lines inserting into the rul_rule_set table: > > Execute trigger.sql attached. > > > > 3. Create suscription: > > CREATE SUBSCRIPTION test_sub CONNECTION 'port=5116 user=postgres dbname=postgres' PUBLICATION test_pub; > > > > C) on master: insert row in table rul_rule_set: > > INSERT INTO rul_rule_set VALUES ('1', 'name','1','age','true'); > > > > The replica will crash with: > > TRAP: FailedAssertion("ActivePortal && ActivePortal->status == PORTAL_ACTIVE", File: "pg_proc.c", Line: 1038, PID: 310502) > > > > as ActivePortal is NULL because logical replication worker was forked before any active command. > > Right. This is because the logical replication workers (apply worker > and tablesync worker) don't have a Portal. > > > > > The backtrace is attached. > > > > I thought to pass the text of the request as a parameter, but most likely, it will be wrong. > > Please suggest the best way to solve this problem, would be very grateful. > > In function_parse_error_transpose(), I think that we don't need the > query text in logical replication worker cases since they don't > execute SQL query. > > I've attached the patch to fix it. The patch also includes a minimal > TAP test for this case. I've registered this issue to the next CF so as not to forget. Regards, -- Masahiko Sawada PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com
В списке pgsql-bugs по дате отправления:
Следующее
От: PG Bug reporting formДата:
Сообщение: BUG #17624: Creating database is non-ending execution.