On 2014-08-15 14:53:45 +0200, Antonin Houska wrote:
> http://www.postgresql.org/message-id/blu436-smtp12682d628f61ab9736099c3dc...@phx.gbl
> recalls me that I also saw an assertion failure recently. Although I
> wanted to isolate and report my issue when my vacation is over, this
> report made me curious whether I saw the same. Eventually it seems to be
> a different symptom.
> 
> Following are the steps that trigger the failure in my environment
> (9.5devel), although it's not always that straightforward - sometimes I
> need to create and populate one more table. (I use the 'test_decoding'
> contrib module.)
> 
> 
> postgres=# SELECT pg_create_logical_replication_slot('my_slot',
> 'test_decoding');
>  pg_create_logical_replication_slot
> ------------------------------------
>  (my_slot,0/16F3B30)
> (1 row)
> 
> postgres=# CREATE TABLE a AS SELECT * FROM
> pg_logical_slot_get_changes('my_slot', NULL, NULL) WITH NO DATA;
> SELECT 0
> postgres=# INSERT INTO a SELECT * FROM
> pg_logical_slot_get_changes('my_slot', NULL, NULL);
> INSERT 0 2
> postgres=# INSERT INTO a SELECT * FROM
> pg_logical_slot_get_changes('my_slot', NULL, NULL);
> The connection to the server was lost. Attempting reset: Failed.
> !>

This was actually triggered by a bug in logical decoding. I've pushed a
fix. Thanks for the report!

I still think it's a bad idea to do something like the above, but even
after a fair amount of thinking I can't come up with a case that's an
actual problem. So I think we can just allow it.
Obviously it's not a good idea to use a output plugin without filtering,
and a logged table for this - each subsequent get_changes() will
otherwise contain the rows inserted into the table the previous
round. The attached regression tests contains pretty output demonstrating
that:
 BEGIN
 table public.changeresult: INSERT: data[text]:'BEGIN'
 table public.changeresult: INSERT: data[text]:'table public.changeresult: 
INSERT: data[text]:''BEGIN'''
 table public.changeresult: INSERT: data[text]:'table public.changeresult: 
INSERT: data[text]:''table public.somechange: INSERT: id[integer]:1'''
 table public.changeresult: INSERT: data[text]:'table public.changeresult: 
INSERT: data[text]:''COMMIT'''
 table public.changeresult: INSERT: data[text]:'COMMIT'
 table public.changeresult: INSERT: data[text]:'BEGIN'
 table public.changeresult: INSERT: data[text]:'table public.changeresult: 
INSERT: data[text]:''BEGIN'''
 table public.changeresult: INSERT: data[text]:'table public.changeresult: 
INSERT: data[text]:''table public.changeresult: INSERT: 
data[text]:''''BEGIN'''''''
 table public.changeresult: INSERT: data[text]:'table public.changeresult: 
INSERT: data[text]:''table public.changeresult: INSERT: data[text]:''''table 
public.somechange: INSERT: id[integer]:1'''''''
 table public.changeresult: INSERT: data[text]:'table public.changeresult: 
INSERT: data[text]:''table public.changeresult: INSERT: 
data[text]:''''COMMIT'''''''
 table public.changeresult: INSERT: data[text]:'table public.changeresult: 
INSERT: data[text]:''COMMIT'''
 table public.changeresult: INSERT: data[text]:'COMMIT'
 COMMIT
(14 rows)

Greetings,

Andres Freund

-- 
 Andres Freund                     http://www.2ndQuadrant.com/
 PostgreSQL Development, 24x7 Support, Training & Services


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to