| From: | "Anton A(dot) Melnikov" <aamelnikov(at)inbox(dot)ru> |
|---|---|
| To: | pgsql-bugs(at)lists(dot)postgresql(dot)org |
| Subject: | [BUG] Crash of logical replica with trigger. |
| Date: | 2022-08-14 19:47:57 |
| Message-ID: | adf0452f-8c6b-7def-d35e-ab516c80088e@inbox.ru |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-bugs |
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.
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.
With best regards,
--
Anton A. Melnikov
Postgres Professional: http://www.postgrespro.com
The Russian Postgres Company
| Attachment | Content-Type | Size |
|---|---|---|
| trigger.sql | application/sql | 1.9 KB |
| bt.txt | text/plain | 10.5 KB |
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Daniele Varrazzo | 2022-08-15 00:44:55 | [PATCH] Fix segfault calling PQflush on invalid connection |
| Previous Message | Tom Lane | 2022-08-14 16:42:50 | Re: BUG #17584: SQL crashes PostgreSQL when using ICU collation |