]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
postgres_fdw: Fix error message for PREPARE TRANSACTION.
authorEtsuro Fujita <efujita@postgresql.org>
Fri, 8 Nov 2019 08:00:35 +0000 (17:00 +0900)
committerEtsuro Fujita <efujita@postgresql.org>
Fri, 8 Nov 2019 08:00:35 +0000 (17:00 +0900)
Currently, postgres_fdw does not support preparing a remote transaction
for two-phase commit even in the case where the remote transaction is
read-only, but the old error message appeared to imply that that was not
supported only if the remote transaction modified remote tables.  Change
the message so as to include the case where the remote transaction is
read-only.

Also fix a comment above the message.

Also add a note about the lack of supporting PREPARE TRANSACTION to the
postgres_fdw documentation.

Reported-by: Gilles Darold
Author: Gilles Darold and Etsuro Fujita
Reviewed-by: Michael Paquier and Kyotaro Horiguchi
Backpatch-through: 9.4
Discussion: https://postgr.es/m/08600ed3-3084-be70-65ba-279ab19618a5%40darold.net

contrib/postgres_fdw/connection.c
doc/src/sgml/postgres-fdw.sgml

index 2243ca2a36c37cc16114caf626815cabda35cfce..b2305780683d1e6ef1a4911e00065277a54ec4c8 100644 (file)
@@ -728,17 +728,17 @@ pgfdw_xact_callback(XactEvent event, void *arg)
                                case XACT_EVENT_PRE_PREPARE:
 
                                        /*
-                                        * We disallow remote transactions that modified anything,
-                                        * since it's not very reasonable to hold them open until
-                                        * the prepared transaction is committed.  For the moment,
-                                        * throw error unconditionally; later we might allow
-                                        * read-only cases.  Note that the error will cause us to
-                                        * come right back here with event == XACT_EVENT_ABORT, so
-                                        * we'll clean up the connection state at that point.
+                                        * We disallow any remote transactions, since it's not
+                                        * very reasonable to hold them open until the prepared
+                                        * transaction is committed.  For the moment, throw error
+                                        * unconditionally; later we might allow read-only cases.
+                                        * Note that the error will cause us to come right back
+                                        * here with event == XACT_EVENT_ABORT, so we'll clean up
+                                        * the connection state at that point.
                                         */
                                        ereport(ERROR,
                                                        (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
-                                                        errmsg("cannot prepare a transaction that modified remote tables")));
+                                                        errmsg("cannot PREPARE a transaction that has operated on postgres_fdw foreign tables")));
                                        break;
                                case XACT_EVENT_PARALLEL_COMMIT:
                                case XACT_EVENT_COMMIT:
index a6c56d1f6342987373d7351a4c1f3e02cf990950..fe651a57d09c9e3d6d422296d74ea7b700f6b8a7 100644 (file)
    COMMITTED</> local transaction.  A future
    <productname>PostgreSQL</productname> release might modify these rules.
   </para>
+
+  <para>
+   Note that it is currently not supported by
+   <filename>postgres_fdw</filename> to prepare the remote transaction for
+   two-phase commit.
+  </para>
  </sect2>
 
  <sect2>