Re: pg_logical_slot_peek_changes crashes postgres when called from inside pl/pgsql

From: Andres Freund <andres(at)anarazel(dot)de>
To: Ben Chobot <bench(at)silentmedia(dot)com>
Cc: pgsql-bugs(at)postgresql(dot)org
Subject: Re: pg_logical_slot_peek_changes crashes postgres when called from inside pl/pgsql
Date: 2017-10-07 04:31:30
Message-ID: 20171007043130.zronedebya6iwtum@alap3.anarazel.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
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

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Ben Chobot 2017-10-07 04:40:06 Re: pg_logical_slot_peek_changes crashes postgres when called from inside pl/pgsql
Previous Message Andres Freund 2017-10-07 04:29:08 Re: pg_logical_slot_peek_changes crashes postgres when called from inside pl/pgsql