Re: pg_logical_slot_peek_changes crashes postgres when called from inside pl/pgsql
Andres Freund <andres@anarazel.de>
From: Andres Freund <andres@anarazel.de>
To: Ben Chobot <bench@silentmedia.com>
Cc: pgsql-bugs@postgresql.org
Date: 2017-10-07T04:31:30Z
Lists: pgsql-bugs
Hi, On 2017-10-04 13:59:20 -0700, Ben Chobot wrote: > postgres=# CREATE OR REPLACE FUNCTION logical_replication_slot_lsn_delta(slot text) RETURNS pg_lsn AS > postgres-# $$ > postgres$# BEGIN > postgres$# return location from pg_logical_slot_peek_changes(slot,null,1) limit 1; > postgres$# END > postgres$# $$ language plpgsql; As the issue is fixed now, I just want to mention that looking at logical decoding output via the SQL interface, especially when doing it in very small increments as you're suggesting here, is way much more expensive than continually streaming changes via the replication protocol. In a lot of cases it'll be orders of magnitude more expensive. So if you can change your usecase to use that, you'll benefit. It also avoids having to change between peek/get, because you can just send back messages specifying up to where you've processed changes safely. Greetings, Andres Freund
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