Thread: [GENERAL] logical decoding output plugin

[GENERAL] logical decoding output plugin

From
Torsten Förtsch
Date:
Hi,

I am working on a logical decoding output plugin. I am only interested in the changes in one particular table.

One way to check for the table would be to compare class_form->relname and get_namespace_name(class_form->relnamespace). But I'd much prefer to just compare the OID of the table.

Is there a cheap way to do something like "SELECT 'schema.table'::regclass::oid" that can be called in the startup callback?

Thanks,
Torsten

Re: [GENERAL] logical decoding output plugin

From
Andres Freund
Date:
Hi,

On 2016-12-10 22:34:02 +0100, Torsten Förtsch wrote:
> I am working on a logical decoding output plugin. I am only interested in
> the changes in one particular table.
>
> One way to check for the table would be to compare class_form->relname
> and get_namespace_name(class_form->relnamespace). But I'd much prefer to
> just compare the OID of the table.
>
> Is there a cheap way to do something like "SELECT
> 'schema.table'::regclass::oid" that can be called in the startup callback?

You shouldn't do it in the startup callback (no catalog access there),
but you can do it the first time through the change callback.

For lookups the most complete lookup is to use RangeVarGetRelid() to get
the oid. There's other variants, but that's the easiest approach.

Do you have to care about the table being renamed?

Greetings,

Andres Freund


Re: [GENERAL] logical decoding output plugin

From
Torsten Förtsch
Date:
On Sun, Dec 11, 2016 at 12:10 AM, Andres Freund <andres@anarazel.de> wrote:
On 2016-12-10 22:34:02 +0100, Torsten Förtsch wrote:
> I am working on a logical decoding output plugin. I am only interested in
> the changes in one particular table.
>
> One way to check for the table would be to compare class_form->relname
> and get_namespace_name(class_form->relnamespace). But I'd much prefer to
> just compare the OID of the table.
>
> Is there a cheap way to do something like "SELECT
> 'schema.table'::regclass::oid" that can be called in the startup callback?

You shouldn't do it in the startup callback (no catalog access there),
but you can do it the first time through the change callback.

For lookups the most complete lookup is to use RangeVarGetRelid() to get
the oid. There's other variants, but that's the easiest approach.

Do you have to care about the table being renamed?

Thanks, Andres. That would be nice to have but not really necessary, at least not at the beginning. Is it possible to catch CREATE TABLE and ALTER TABLE RENAME in 9.5?

Thanks,
Torsten

Re: [GENERAL] logical decoding output plugin

From
Michael Paquier
Date:
On Sun, Dec 11, 2016 at 7:31 PM, Torsten Förtsch <tfoertsch123@gmail.com> wrote:
> Is it possible to catch CREATE TABLE and ALTER TABLE RENAME in 9.5?

You are looking for pg_ddl_command via event triggers.
src/test/modules/test_ddl_deparse is one example of that in the code
tree.
--
Michael