Re: Too rigorous assert in reorderbuffer.c

Alexey Kondratov <a.kondratov@postgrespro.ru>

From: Alexey Kondratov <a.kondratov@postgrespro.ru>
To: Arseny Sher <a.sher@postgrespro.ru>, pgsql-hackers <pgsql-hackers@postgresql.org>, Alexander Lakhin <a.lakhin@postgrespro.ru>
Date: 2019-02-04T16:15:14Z
Lists: pgsql-hackers
Hi,

On 31.01.2019 9:21, Arseny Sher wrote:
> My colleague Alexander Lakhin has noticed an assertion failure in
> reorderbuffer.c:1330. Here is a simple snippet reproducing it:
>
> SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot', 'test_decoding');
>
> create table t(k int);
> begin;
> savepoint a;
> alter table t alter column k type text;
> rollback to savepoint a;
> alter table t alter column k type bigint;
> commit;
>
> SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');

I just want to add, that I have accidentally discovered the same issue 
during the testing of the Tomas's large transactions streaming patch 
[1], and had to remove this assert to get things working. I thought that 
it was somehow related to the streaming mode and did not test the same 
query alone.


[1] 
https://www.postgresql.org/message-id/76fc440e-91c3-afe2-b78a-987205b3c758%402ndquadrant.com


Regards

-- 
Alexey Kondratov

Postgres Professional https://www.postgrespro.com
Russian Postgres Company



Commits

  1. Relax overly strict assertion

  2. Handle heap rewrites even better in logical decoding