Re: pg_logical_slot_peek_changes crashes postgres when called from inside pl/pgsql
Ben Chobot <bench@silentmedia.com>
From: Ben Chobot <bench@silentmedia.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Andres Freund <andres@anarazel.de>,
Michael Paquier <michael.paquier@gmail.com>,
PostgreSQL mailing lists <pgsql-bugs@postgresql.org>
Date: 2017-10-07T04:24:34Z
Lists: pgsql-bugs
> On Oct 6, 2017, at 4:21 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
>
> I wrote:
>> I thought of a better way, as attached.
>
> Pushed. Ben, could you confirm that the committed patch fixes your
> original use-case? The 9.5 version of the patch is at
>
> https://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=13d2ed921035f2d88adf87d796373e920bdd56ee
Not quickly, to be honest. But the test case is not hard. If you can do this without crashing, I'm convinced you've fixed the problem as I've seen it:
SELECT * FROM pg_create_logical_replication_slot('regression_slot', 'test_decoding');
CREATE TABLE public.foo(i int);
insert into public.foo(i) values(1);
CREATE OR REPLACE FUNCTION logical_replication_slot_lsn_delta(slot text) RETURNS pg_lsn AS
$$
BEGIN
return location from pg_logical_slot_peek_changes(slot,null,1) limit 1;
END
$$ language plpgsql;
select logical_replication_slot_lsn_delta('regression_slot');
Thanks for the fast response, and for the amazing code that is Postgres!
Commits
-
Fix crash when logical decoding is invoked from a PL function.
- bfb69b1e5d97 9.4.15 landed
- 13d2ed921035 9.5.10 landed
- 485d49dbc9ed 10.1 landed
- 185279da3f37 9.6.6 landed
- 1518d07842dc 11.0 landed