Re: Logical Replication WIP

From: Andres Freund <andres(at)anarazel(dot)de>
To: Petr Jelinek <petr(at)2ndquadrant(dot)com>
Cc: Steve Singer <steve(at)ssinger(dot)info>, Peter Eisentraut <peter(dot)eisentraut(at)2ndquadrant(dot)com>, Craig Ringer <craig(at)2ndquadrant(dot)com>, Simon Riggs <simon(at)2ndquadrant(dot)com>, PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Logical Replication WIP
Date: 2016-11-04 13:24:23
Message-ID: 20161104132423.kwqnc4l3cgep7rjz@alap3.anarazel.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi,

(btw, I vote against tarballing patches)

+ <tgroup cols="4">
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Type</entry>
+ <entry>References</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry><structfield>oid</structfield></entry>
+ <entry><type>oid</type></entry>
+ <entry></entry>
+ <entry>Row identifier (hidden attribute; must be explicitly selected)</entry>
+ </row>
+

+ <row>
+ <entry><structfield>subpublications</structfield></entry>
+ <entry><type>name[]</type></entry>
+ <entry></entry>
+ <entry>Array of subscribed publication names. These reference the
+ publications on the publisher server.
+ </entry>

Why is this names and not oids? So you can see it across databases?

I think this again should have an owner.

include $(top_srcdir)/src/backend/common.mk
diff --git a/src/backend/commands/event_trigger.c b/src/backend/commands/event_trigger.c
index 68d7e46..523008d 100644
--- a/src/backend/commands/event_trigger.c
+++ b/src/backend/commands/event_trigger.c
@@ -112,6 +112,7 @@ static event_trigger_support_data event_trigger_support[] = {
{"SCHEMA", true},
{"SEQUENCE", true},
{"SERVER", true},
+ {"SUBSCRIPTION", true},

Hm, is that ok? Subscriptions are shared, so ...?

+ /*
+ * If requested, create the replication slot on remote side for our
+ * newly created subscription.
+ *
+ * Note, we can't cleanup slot in case of failure as reason for
+ * failure might be already existing slot of the same name and we
+ * don't want to drop somebody else's slot by mistake.
+ */
+ if (create_slot)
+ {
+ XLogRecPtr lsn;
+
+ /*
+ * Create the replication slot on remote side for our newly created
+ * subscription.
+ *
+ * Note, we can't cleanup slot in case of failure as reason for
+ * failure might be already existing slot of the same name and we
+ * don't want to drop somebody else's slot by mistake.
+ */

We should really be able to recognize that based on the error code...

+/*
+ * Drop subscription by OID
+ */
+void
+DropSubscriptionById(Oid subid)
+{

+ /*
+ * We must ignore errors here as that would make it impossible to drop
+ * subscription when publisher is down.
+ */

I'm not convinced. Leaving a slot around without a "record" of it on
the creating side isn't nice either. Maybe a FORCE flag or something?

+subscription_create_opt_item:
+ subscription_opt_item
+ | INITIALLY IDENT
+ {
+ if (strcmp($2, "enabled") == 0)
+ $$ = makeDefElem("enabled",
+ (Node *)makeInteger(TRUE), @1);
+ else if (strcmp($2, "disabled") == 0)
+ $$ = makeDefElem("enabled",
+ (Node *)makeInteger(FALSE), @1);
+ else
+ ereport(ERROR,
+ (errcode(ERRCODE_SYNTAX_ERROR),
+ errmsg("unrecognized subscription option \"%s\"", $1),
+ parser_errposition(@2)));
+ }
+ | IDENT
+ {
+ if (strcmp($1, "create_slot") == 0)
+ $$ = makeDefElem("create_slot",
+ (Node *)makeInteger(TRUE), @1);
+ else if (strcmp($1, "nocreate_slot") == 0)
+ $$ = makeDefElem("create_slot",
+ (Node *)makeInteger(FALSE), @1);
+ }
+ ;

Hm, the IDENT case ignores $1 if it's not create_slot/nocreate_slot and
thus leaves $$ uninitialized?

I again really would like to have the error checking elsewhere.

- Andres

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Andres Freund 2016-11-04 13:35:21 Re: Improve hash-agg performance
Previous Message Heikki Linnakangas 2016-11-04 13:18:49 Re: Improve hash-agg performance