On 24 March 2016 at 22:20, Stas Kelvich <s.kelv...@postgrespro.ru> wrote:
> I think all the locking already handled properly by creating dummy backend
> in PGPROC, as it done in usual postgres 2pc implementation.
On the downstream, yes. But what about the decoding, reorder buffer and
output plugin? They access the relcache etc. If you changed the structure
of a table in a prepared xact you have to make sure you get that right.
> Just checked DDL with following scenario:
> * prepare tx that inserts a row in table on master
> * execute DROP TABLE on pglogical slave
> * commit prepared on master
> Now it behaves as expected — slave blocks DROP TABLE until commit prepared
> on master.
Try doing DDL in the prepared xact on the upstream side, especially things
that make structural changes to tables. Test both things that do full-table
rewrites (alter table ... add column ... default not null) and things that
don't (alter table ... drop column ; alter table ... add column ...;
without not null or default).
Craig Ringer http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services