On 17 February 2016 at 16:27, Andres Freund <and...@anarazel.de> wrote:
> On 2016-02-17 09:33:56 +0800, Craig Ringer wrote:
> > Some DDL operations don't translate well to a series of replicatable
> > actions. The case I hit the most is
> > ALTER TABLE mytable ADD COLUMN somecolumn sometype NOT NULL DEFAULT
> > some_function();
> > This is executed (simplified) by taking an ACCESS EXCLUSIVE lock,
> > the catalogs but not making the changes visible yet, rewriting the table,
> > and committing to make the rewritten table and the catalog changes
> > That won't work well with logical replication.
> FWIW, I think this is much less a fundamental, and more an
> implementation issue. Falling back to just re-replicating the table
Do you mean taking a new schema dump from the upstream? Or just the table
We already receive the table data in a pg_temp_<nnnn> virtual relation.
While it'd be nice to have a better way to map that to the relation being
rewritten without having to do string compares on table names all the time,
it works. If we do a low level truncate on the table *then* execute the DDL
on the empty table and finally rewrite it based on that stream as we
receive it that should work OK.
> Lets get the basics right, before reaching for the moon.
Yeah, it's got to be incremental. Though I do think we'll need to address
DDL affecting shared catalogs.
Craig Ringer http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services