Re: Logical Decoding - Execute join query

From: Craig Ringer <craig(at)2ndquadrant(dot)com>
To: Andres Freund <andres(at)anarazel(dot)de>
Cc: "hari(dot)prasath" <hari(dot)prasath(at)zohocorp(dot)com>, "pgsql-hackers(at)postgresql(dot)org" <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Logical Decoding - Execute join query
Date: 2016-04-01 15:02:49
Message-ID: CAMsr+YG0LmQNpbock7Y3SqrG+v3nw9TtVOACCeCbQmWMN9hguw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On 1 April 2016 at 17:45, Andres Freund <andres(at)anarazel(dot)de> wrote:

> Hi,
>
> On 2016-04-01 15:09:59 +0530, hari.prasath wrote:
> > I tried to execute a join query using SPI_execute() in logical
> > decoding part and got inconsistent values (i am referring it as
> > inconsistent since it is returning the old values which is
> > present at the postgresql server start).
>
> You are not allowed to access non catalog tables in an output plugin. To
> quote the manual:
> > Read only access to relations is permitted as long as only relations are
> > accessed that either have been created by <command>initdb</command> in
> > the <literal>pg_catalog</literal> schema, or have been marked as user
> > provided catalog tables using

> The reason for that is that we'd have to keep all rows in the tables, if
> you wanted to be look at the state "in the past".
>

I suspect this is going to come up more and more as people start using
logical decoding.

A while back I had a quick look at ways to ensure we actually die with an
assertion failure when this happens. I didn't have much luck. The places I
could find where something definitely unsafe would be happening were too
far from anywhere that had knowledge of the relation's catalog entry to
check whether it was a user catalog. Not without doing relcache lookups
just to check an assertion, anyway. Or to necessarily even know it was
running under a historical snapshot without poking through layers messily.
OTOH, I don't know the area well and didn't dig too deeply.

Then again, IIRC the SPI still lets you proceed in read-only mode without
having a snapshot set up or an open xact... and it might work. For a while.
Sometimes. Possibly even with correct results. Depending on what exactly
you do. The world doesn't seem to have ended as a result of not immediately
dying with an assertion failure in that situation.

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

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2016-04-01 15:03:00 Re: OOM in libpq and infinite loop with getCopyStart()
Previous Message Alvaro Herrera 2016-04-01 15:00:21 Re: dealing with extension dependencies that aren't quite 'e'