Re: [HACKERS] generated columns - Mailing list pgsql-hackers

From Simon Riggs
Subject Re: [HACKERS] generated columns
Date
Msg-id CANP8+jLqcSm2K=KidrU-3HdpG0JUtepmycw3qYNm_M0HS_8feA@mail.gmail.com
Whole thread Raw
In response to Re: [HACKERS] generated columns  (Erik Rijkers <er@xs4all.nl>)
Responses Re: [HACKERS] generated columns  (Sergei Kornilov <sk@zsrv.org>)
List pgsql-hackers
On Wed, 31 Oct 2018 at 08:29, Erik Rijkers <er@xs4all.nl> wrote:
On 2018-10-31 09:15, Simon Riggs wrote:
> On Wed, 31 Oct 2018 at 07:58, Erikjan Rijkers <er@xs4all.nl> wrote:
>
>
>> I have also noticed that logical replication isn't possible on tables
>> with a generated column.  That's a shame but I suppsoe that is as
>> expected.
>>
>
> Couldn't see anything like that in the patch. Presumably unintended
> consequence. The generated value needs to be in WAL, so decoding it
> should
> be trivial.
>

These log messages occur on attempting at logical replication:

( table t1 has no generated columns; replicates fine.
   table t2 has one generated column; replication fails: see below )

LOG:  database system is ready to accept connections
LOG:  logical replication apply worker for subscription "sub1" has
started
LOG:  logical replication table synchronization worker for subscription
"sub1", table "t1" has started
LOG:  logical replication table synchronization worker for subscription
"sub1", table "t2" has started
LOG:  logical replication table synchronization worker for subscription
"sub1", table "t1" has finished
ERROR:  column "i2" is a generated column
DETAIL:  Generated columns cannot be used in COPY.
LOG:  background worker "logical replication worker" (PID 22252) exited
with exit code 1

OK, so the problem is COPY.

Which means we have an issue with restore. We need to be able to pg_dump a table with generated columns, then restore it afterwards. More generally, we need to be able to handle data that has already been generated - the "generate" idea should apply to new data not existing data.

Sounds like we need to do an ALTER TABLE ... GENERATE ALWAYS after the table has been re-created and re-loaded, so that both logical replication and dump/restore would work.

--
Simon Riggs                http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

pgsql-hackers by date:

Previous
From: Stephen Frost
Date:
Subject: Re: INSTALL file
Next
From: Sergei Kornilov
Date:
Subject: Re: [HACKERS] generated columns