Skip to content

Commit 1bd67d5

Browse files
author
Etsuro Fujita
committed
postgres_fdw: Fix error message for PREPARE TRANSACTION.
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
1 parent 87477b6 commit 1bd67d5

File tree

2 files changed

+14
-8
lines changed

2 files changed

+14
-8
lines changed

contrib/postgres_fdw/connection.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -743,17 +743,17 @@ pgfdw_xact_callback(XactEvent event, void *arg)
743743
case XACT_EVENT_PRE_PREPARE:
744744

745745
/*
746-
* We disallow remote transactions that modified anything,
747-
* since it's not very reasonable to hold them open until
748-
* the prepared transaction is committed. For the moment,
749-
* throw error unconditionally; later we might allow
750-
* read-only cases. Note that the error will cause us to
751-
* come right back here with event == XACT_EVENT_ABORT, so
752-
* we'll clean up the connection state at that point.
746+
* We disallow any remote transactions, since it's not
747+
* very reasonable to hold them open until the prepared
748+
* transaction is committed. For the moment, throw error
749+
* unconditionally; later we might allow read-only cases.
750+
* Note that the error will cause us to come right back
751+
* here with event == XACT_EVENT_ABORT, so we'll clean up
752+
* the connection state at that point.
753753
*/
754754
ereport(ERROR,
755755
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
756-
errmsg("cannot prepare a transaction that modified remote tables")));
756+
errmsg("cannot PREPARE a transaction that has operated on postgres_fdw foreign tables")));
757757
break;
758758
case XACT_EVENT_COMMIT:
759759
case XACT_EVENT_PREPARE:

doc/src/sgml/postgres-fdw.sgml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,12 @@
333333
COMMITTED</> local transaction. A future
334334
<productname>PostgreSQL</productname> release might modify these rules.
335335
</para>
336+
337+
<para>
338+
Note that it is currently not supported by
339+
<filename>postgres_fdw</filename> to prepare the remote transaction for
340+
two-phase commit.
341+
</para>
336342
</sect2>
337343

338344
<sect2>

0 commit comments

Comments
 (0)