Le 09/11/2019 à 02:22, Michael Paquier a écrit :
> On Fri, Nov 08, 2019 at 10:19:01AM +0100, Gilles Darold wrote:
>> I don't think so. The support or not of 2PC is on foreign data wrapper
>> side. In postgres_fdw contrib the error for use with 2PC is not part of
>> the test but it will be thrown anyway. I guess that a test will be
>> valuable only if there is support for readonly query.
> That's what I call a case for negative testing.  We don't allow 2PC to
> be used so there is a point in having a test to make sure of that.
> This way, if the code in this area is refactored or changed, we still
> make sure that 2PC is correctly prevented.  My suggestion is to close
> this gap.  One point here is that this requires an alternate output
> file because of max_prepared_transactions and there is no point in
> creating one with all the tests of postgres_fdw in a single file as we
> have now as it would create 8k lines of expected file bloat, so it
> would be better to split the tests first.  My 2c.
> --
> Michael


Hi Michael, it looks that a separate test is not required at least for
this test. Here is a patch that enable the test in
contrib/postgres_fdw/, expected output:


    -- Make sure that 2PC is correctly prevented
    BEGIN;
    SELECT count(*) FROM ft1;
     count
    -------
       822
    (1 row)

    -- Must throw an error
    PREPARE TRANSACTION 'fdw_tpc';
    ERROR:  cannot PREPARE a transaction that has operated on
    postgres_fdw foreign tables
    ROLLBACK;
    WARNING:  there is no transaction in progress



-- 
Gilles Darold
http://www.darold.net/

diff --git a/contrib/postgres_fdw/expected/postgres_fdw.out b/contrib/postgres_fdw/expected/postgres_fdw.out
index f0c842a607..9004e7e076 100644
--- a/contrib/postgres_fdw/expected/postgres_fdw.out
+++ b/contrib/postgres_fdw/expected/postgres_fdw.out
@@ -8781,3 +8781,16 @@ SELECT b, avg(a), max(a), count(*) FROM pagg_tab GROUP BY b HAVING sum(a) < 700
 
 -- Clean-up
 RESET enable_partitionwise_aggregate;
+-- Make sure that 2PC is correctly prevented
+BEGIN;
+SELECT count(*) FROM ft1;
+ count 
+-------
+   822
+(1 row)
+
+-- Must throw an error
+PREPARE TRANSACTION 'fdw_tpc';
+ERROR:  cannot PREPARE a transaction that has operated on postgres_fdw foreign tables
+ROLLBACK;
+WARNING:  there is no transaction in progress
diff --git a/contrib/postgres_fdw/sql/postgres_fdw.sql b/contrib/postgres_fdw/sql/postgres_fdw.sql
index 630b803e26..5df6fe3ae0 100644
--- a/contrib/postgres_fdw/sql/postgres_fdw.sql
+++ b/contrib/postgres_fdw/sql/postgres_fdw.sql
@@ -2479,3 +2479,10 @@ SELECT b, avg(a), max(a), count(*) FROM pagg_tab GROUP BY b HAVING sum(a) < 700
 
 -- Clean-up
 RESET enable_partitionwise_aggregate;
+
+-- Make sure that 2PC is correctly prevented
+BEGIN;
+SELECT count(*) FROM ft1;
+-- Must throw an error
+PREPARE TRANSACTION 'fdw_tpc';
+ROLLBACK;

Reply via email to