diff -U3 /tmp/cirrus-ci-build/contrib/postgres_fdw/expected/postgres_fdw.out /tmp/cirrus-ci-build/build/testrun/postgres_fdw/regress/results/postgres_fdw.out --- /tmp/cirrus-ci-build/contrib/postgres_fdw/expected/postgres_fdw.out 2024-03-26 23:35:26.197611000 +0000 +++ /tmp/cirrus-ci-build/build/testrun/postgres_fdw/regress/results/postgres_fdw.out 2024-03-26 23:53:46.156002000 +0000 @@ -72,21 +72,25 @@ id % 10, 'foo'::user_enum FROM generate_series(1, 1000) id; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree INSERT INTO "S 1"."T 2" SELECT id, 'AAA' || to_char(id, 'FM000') FROM generate_series(1, 100) id; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree INSERT INTO "S 1"."T 3" SELECT id, id + 1, 'AAA' || to_char(id, 'FM000') FROM generate_series(1, 100) id; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree DELETE FROM "S 1"."T 3" WHERE c1 % 2 != 0; -- delete for outer join tests INSERT INTO "S 1"."T 4" SELECT id, id + 1, 'AAA' || to_char(id, 'FM000') FROM generate_series(1, 100) id; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree DELETE FROM "S 1"."T 4" WHERE c1 % 3 != 0; -- delete for outer join tests ANALYZE "S 1"."T 1"; ANALYZE "S 1"."T 2"; @@ -201,6 +205,7 @@ ALTER FOREIGN TABLE ft1 ALTER COLUMN c1 OPTIONS (column_name 'C 1'); ALTER FOREIGN TABLE ft2 ALTER COLUMN c1 OPTIONS (column_name 'C 1'); \det+ +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree List of foreign tables Schema | Table | Server | FDW options | Description --------+-------+-----------+---------------------------------------+------------- @@ -216,6 +221,7 @@ -- Remote's errors might be non-English, so hide them to ensure stable results \set VERBOSITY terse SELECT c3, c4 FROM ft1 ORDER BY c3, c1 LIMIT 1; -- should work +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c3 | c4 -------+------------------------------ 00001 | Fri Jan 02 00:00:00 1970 PST @@ -223,6 +229,7 @@ ALTER SERVER loopback OPTIONS (SET dbname 'no such database'); SELECT c3, c4 FROM ft1 ORDER BY c3, c1 LIMIT 1; -- should fail +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ERROR: could not connect to server "loopback" DO $d$ BEGIN @@ -231,6 +238,7 @@ END; $d$; SELECT c3, c4 FROM ft1 ORDER BY c3, c1 LIMIT 1; -- should work again +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c3 | c4 -------+------------------------------ 00001 | Fri Jan 02 00:00:00 1970 PST @@ -240,10 +248,12 @@ ALTER USER MAPPING FOR CURRENT_USER SERVER loopback OPTIONS (ADD user 'no such user'); SELECT c3, c4 FROM ft1 ORDER BY c3, c1 LIMIT 1; -- should fail +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ERROR: could not connect to server "loopback" ALTER USER MAPPING FOR CURRENT_USER SERVER loopback OPTIONS (DROP user); SELECT c3, c4 FROM ft1 ORDER BY c3, c1 LIMIT 1; -- should work again +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c3 | c4 -------+------------------------------ 00001 | Fri Jan 02 00:00:00 1970 PST @@ -266,12 +276,14 @@ -- =================================================================== -- single table without alias EXPLAIN (COSTS OFF) SELECT * FROM ft1 ORDER BY c3, c1 OFFSET 100 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN --------------------- Foreign Scan on ft1 (1 row) SELECT * FROM ft1 ORDER BY c3, c1 OFFSET 100 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 -----+----+-------+------------------------------+--------------------------+----+------------+----- 101 | 1 | 00101 | Fri Jan 02 00:00:00 1970 PST | Fri Jan 02 00:00:00 1970 | 1 | 1 | foo @@ -288,6 +300,7 @@ -- single table with alias - also test that tableoid sort is not pushed to remote side EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 ORDER BY t1.c3, t1.c1, t1.tableoid OFFSET 100 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------- Limit @@ -301,6 +314,7 @@ (8 rows) SELECT * FROM ft1 t1 ORDER BY t1.c3, t1.c1, t1.tableoid OFFSET 100 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 -----+----+-------+------------------------------+--------------------------+----+------------+----- 101 | 1 | 00101 | Fri Jan 02 00:00:00 1970 PST | Fri Jan 02 00:00:00 1970 | 1 | 1 | foo @@ -317,6 +331,7 @@ -- whole-row reference EXPLAIN (VERBOSE, COSTS OFF) SELECT t1 FROM ft1 t1 ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan on public.ft1 t1 @@ -325,6 +340,7 @@ (3 rows) SELECT t1 FROM ft1 t1 ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree t1 -------------------------------------------------------------------------------------------- (101,1,00101,"Fri Jan 02 00:00:00 1970 PST","Fri Jan 02 00:00:00 1970",1,"1 ",foo) @@ -341,12 +357,14 @@ -- empty result SELECT * FROM ft1 WHERE false; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 ----+----+----+----+----+----+----+---- (0 rows) -- with WHERE clause EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE t1.c1 = 101 AND t1.c6 = '1' AND t1.c7 >= '1'; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------- Foreign Scan on public.ft1 t1 @@ -355,6 +373,7 @@ (3 rows) SELECT * FROM ft1 t1 WHERE t1.c1 = 101 AND t1.c6 = '1' AND t1.c7 >= '1'; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 -----+----+-------+------------------------------+--------------------------+----+------------+----- 101 | 1 | 00101 | Fri Jan 02 00:00:00 1970 PST | Fri Jan 02 00:00:00 1970 | 1 | 1 | foo @@ -362,6 +381,7 @@ -- with FOR UPDATE/SHARE EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 = 101 FOR UPDATE; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ---------------------------------------------------------------------------------------------------------- Foreign Scan on public.ft1 t1 @@ -370,12 +390,14 @@ (3 rows) SELECT * FROM ft1 t1 WHERE c1 = 101 FOR UPDATE; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 -----+----+-------+------------------------------+--------------------------+----+------------+----- 101 | 1 | 00101 | Fri Jan 02 00:00:00 1970 PST | Fri Jan 02 00:00:00 1970 | 1 | 1 | foo (1 row) EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 = 102 FOR SHARE; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN --------------------------------------------------------------------------------------------------------- Foreign Scan on public.ft1 t1 @@ -384,6 +406,7 @@ (3 rows) SELECT * FROM ft1 t1 WHERE c1 = 102 FOR SHARE; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 -----+----+-------+------------------------------+--------------------------+----+------------+----- 102 | 2 | 00102 | Sat Jan 03 00:00:00 1970 PST | Sat Jan 03 00:00:00 1970 | 2 | 2 | foo @@ -391,6 +414,7 @@ -- aggregate SELECT COUNT(*) FROM ft1 t1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree count ------- 1000 @@ -398,6 +422,7 @@ -- subquery SELECT * FROM ft1 t1 WHERE t1.c3 IN (SELECT c3 FROM ft2 t2 WHERE c1 <= 10) ORDER BY c1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 ----+----+-------+------------------------------+--------------------------+----+------------+----- 1 | 1 | 00001 | Fri Jan 02 00:00:00 1970 PST | Fri Jan 02 00:00:00 1970 | 1 | 1 | foo @@ -414,6 +439,7 @@ -- subquery+MAX SELECT * FROM ft1 t1 WHERE t1.c3 = (SELECT MAX(c3) FROM ft2 t2) ORDER BY c1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 ------+----+-------+------------------------------+--------------------------+----+------------+----- 1000 | 0 | 01000 | Thu Jan 01 00:00:00 1970 PST | Thu Jan 01 00:00:00 1970 | 0 | 0 | foo @@ -421,6 +447,7 @@ -- used in CTE WITH t1 AS (SELECT * FROM ft1 WHERE c1 <= 10) SELECT t2.c1, t2.c2, t2.c3, t2.c4 FROM t1, ft2 t2 WHERE t1.c1 = t2.c1 ORDER BY t1.c1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 | c4 ----+----+-------+------------------------------ 1 | 1 | 00001 | Fri Jan 02 00:00:00 1970 PST @@ -437,6 +464,7 @@ -- fixed values SELECT 'fixed', NULL FROM ft1 t1 WHERE c1 = 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ?column? | ?column? ----------+---------- fixed | @@ -448,6 +476,7 @@ -- inner join; expressions in the clauses appear in the equivalence class list EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, t2."C 1" FROM ft2 t1 JOIN "S 1"."T 1" t2 ON (t1.c1 = t2."C 1") OFFSET 100 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN --------------------------------------------------------------------------------------- Limit @@ -464,6 +493,7 @@ (11 rows) SELECT t1.c1, t2."C 1" FROM ft2 t1 JOIN "S 1"."T 1" t2 ON (t1.c1 = t2."C 1") OFFSET 100 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | C 1 -----+----- 101 | 101 @@ -482,6 +512,7 @@ -- list but no output change as compared to the previous query EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, t2."C 1" FROM ft2 t1 LEFT JOIN "S 1"."T 1" t2 ON (t1.c1 = t2."C 1") OFFSET 100 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN --------------------------------------------------------------------------------------- Limit @@ -498,6 +529,7 @@ (11 rows) SELECT t1.c1, t2."C 1" FROM ft2 t1 LEFT JOIN "S 1"."T 1" t2 ON (t1.c1 = t2."C 1") OFFSET 100 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | C 1 -----+----- 101 | 101 @@ -516,6 +548,7 @@ -- foreign join so that the local table can be joined using merge join strategy. EXPLAIN (VERBOSE, COSTS OFF) SELECT t1."C 1" FROM "S 1"."T 1" t1 left join ft1 t2 join ft2 t3 on (t2.c1 = t3.c1) on (t3.c1 = t1."C 1") OFFSET 100 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------------------------- Limit @@ -533,6 +566,7 @@ (12 rows) SELECT t1."C 1" FROM "S 1"."T 1" t1 left join ft1 t2 join ft2 t3 on (t2.c1 = t3.c1) on (t3.c1 = t1."C 1") OFFSET 100 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree C 1 ----- 101 @@ -552,6 +586,7 @@ -- included in join restrictions. EXPLAIN (VERBOSE, COSTS OFF) SELECT t1."C 1", t2.c1, t3.c1 FROM "S 1"."T 1" t1 left join ft1 t2 full join ft2 t3 on (t2.c1 = t3.c1) on (t3.c1 = t1."C 1") OFFSET 100 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------ Limit @@ -569,6 +604,7 @@ (12 rows) SELECT t1."C 1", t2.c1, t3.c1 FROM "S 1"."T 1" t1 left join ft1 t2 full join ft2 t3 on (t2.c1 = t3.c1) on (t3.c1 = t1."C 1") OFFSET 100 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree C 1 | c1 | c1 -----+-----+----- 101 | 101 | 101 @@ -586,6 +622,7 @@ -- Test similar to above with all full outer joins EXPLAIN (VERBOSE, COSTS OFF) SELECT t1."C 1", t2.c1, t3.c1 FROM "S 1"."T 1" t1 full join ft1 t2 full join ft2 t3 on (t2.c1 = t3.c1) on (t3.c1 = t1."C 1") OFFSET 100 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------ Limit @@ -603,6 +640,7 @@ (12 rows) SELECT t1."C 1", t2.c1, t3.c1 FROM "S 1"."T 1" t1 full join ft1 t2 full join ft2 t3 on (t2.c1 = t3.c1) on (t3.c1 = t1."C 1") OFFSET 100 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree C 1 | c1 | c1 -----+-----+----- 101 | 101 | 101 @@ -627,9 +665,11 @@ SERVER loopback OPTIONS (table_name 'loct_empty'); INSERT INTO loct_empty SELECT id, 'AAA' || to_char(id, 'FM000') FROM generate_series(1, 100) id; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree DELETE FROM loct_empty; ANALYZE ft_empty; EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft_empty ORDER BY c1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------- Foreign Scan on public.ft_empty @@ -641,6 +681,7 @@ -- WHERE with remotely-executable conditions -- =================================================================== EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE t1.c1 = 1; -- Var, OpExpr(b), Const +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN --------------------------------------------------------------------------------------------- Foreign Scan on public.ft1 t1 @@ -649,6 +690,7 @@ (3 rows) EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE t1.c1 = 100 AND t1.c2 = 0; -- BoolExpr +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN -------------------------------------------------------------------------------------------------------------- Foreign Scan on public.ft1 t1 @@ -657,6 +699,7 @@ (3 rows) EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c3 IS NULL; -- NullTest +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ---------------------------------------------------------------------------------------------- Foreign Scan on public.ft1 t1 @@ -665,6 +708,7 @@ (3 rows) EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c3 IS NOT NULL; -- NullTest +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN -------------------------------------------------------------------------------------------------- Foreign Scan on public.ft1 t1 @@ -673,6 +717,7 @@ (3 rows) EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE round(abs(c1), 0) = 1; -- FuncExpr +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN --------------------------------------------------------------------------------------------------------------------- Foreign Scan on public.ft1 t1 @@ -681,6 +726,7 @@ (3 rows) EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 = -c1; -- OpExpr(l) +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ----------------------------------------------------------------------------------------------------- Foreign Scan on public.ft1 t1 @@ -689,6 +735,7 @@ (3 rows) EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE (c1 IS NOT NULL) IS DISTINCT FROM (c1 IS NOT NULL); -- DistinctExpr +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan on public.ft1 t1 @@ -697,6 +744,7 @@ (3 rows) EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 = ANY(ARRAY[c2, 1, c1 + 0]); -- ScalarArrayOpExpr +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN --------------------------------------------------------------------------------------------------------------------------- Foreign Scan on public.ft1 t1 @@ -705,6 +753,7 @@ (3 rows) EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 = (ARRAY[c1,c2,3])[1]; -- SubscriptingRef +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ---------------------------------------------------------------------------------------------------------------------- Foreign Scan on public.ft1 t1 @@ -713,6 +762,7 @@ (3 rows) EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c6 = E'foo''s\\bar'; -- check special chars +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------- Foreign Scan on public.ft1 t1 @@ -721,6 +771,7 @@ (3 rows) EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c8 = 'foo'; -- can't be sent to remote +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------- Foreign Scan on public.ft1 t1 @@ -732,6 +783,7 @@ -- parameterized remote path for foreign table EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM "S 1"."T 1" a, ft2 b WHERE a."C 1" = 47 AND b.c1 = a.c2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------- Nested Loop @@ -745,6 +797,7 @@ (8 rows) SELECT * FROM "S 1"."T 1" a, ft2 b WHERE a."C 1" = 47 AND b.c1 = a.c2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree C 1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 | c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 -----+----+-------+------------------------------+--------------------------+----+------------+-----+----+----+-------+------------------------------+--------------------------+----+------------+----- 47 | 7 | 00047 | Tue Feb 17 00:00:00 1970 PST | Tue Feb 17 00:00:00 1970 | 7 | 7 | foo | 7 | 7 | 00007 | Thu Jan 08 00:00:00 1970 PST | Thu Jan 08 00:00:00 1970 | 7 | 7 | foo @@ -754,6 +807,7 @@ EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft2 a, ft2 b WHERE a.c2 = 6 AND b.c1 = a.c1 AND a.c8 = 'foo' AND b.c7 = upper(a.c7); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------- Nested Loop @@ -770,6 +824,7 @@ SELECT * FROM ft2 a, ft2 b WHERE a.c2 = 6 AND b.c1 = a.c1 AND a.c8 = 'foo' AND b.c7 = upper(a.c7); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 | c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 -----+----+-------+------------------------------+--------------------------+----+------------+-----+-----+----+-------+------------------------------+--------------------------+----+------------+----- 6 | 6 | 00006 | Wed Jan 07 00:00:00 1970 PST | Wed Jan 07 00:00:00 1970 | 6 | 6 | foo | 6 | 6 | 00006 | Wed Jan 07 00:00:00 1970 PST | Wed Jan 07 00:00:00 1970 | 6 | 6 | foo @@ -876,6 +931,7 @@ -- bug before 9.3.5 due to sloppy handling of remote-estimate parameters SELECT * FROM ft1 WHERE c1 = ANY (ARRAY(SELECT c1 FROM ft2 WHERE c1 < 5)); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 ----+----+-------+------------------------------+--------------------------+----+------------+----- 1 | 1 | 00001 | Fri Jan 02 00:00:00 1970 PST | Fri Jan 02 00:00:00 1970 | 1 | 1 | foo @@ -885,6 +941,7 @@ (4 rows) SELECT * FROM ft2 WHERE c1 = ANY (ARRAY(SELECT c1 FROM ft1 WHERE c1 < 5)); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 ----+----+-------+------------------------------+--------------------------+----+------------+----- 1 | 1 | 00001 | Fri Jan 02 00:00:00 1970 PST | Fri Jan 02 00:00:00 1970 | 1 | 1 | foo @@ -908,6 +965,7 @@ -- built-in operators and functions can be shipped for remote execution EXPLAIN (VERBOSE, COSTS OFF) SELECT count(c3) FROM ft1 t1 WHERE t1.c1 = abs(t1.c2); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN --------------------------------------------------------------------------- Foreign Scan @@ -917,6 +975,7 @@ (4 rows) SELECT count(c3) FROM ft1 t1 WHERE t1.c1 = abs(t1.c2); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree count ------- 9 @@ -924,6 +983,7 @@ EXPLAIN (VERBOSE, COSTS OFF) SELECT count(c3) FROM ft1 t1 WHERE t1.c1 = t1.c2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ---------------------------------------------------------------------- Foreign Scan @@ -933,6 +993,7 @@ (4 rows) SELECT count(c3) FROM ft1 t1 WHERE t1.c1 = t1.c2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree count ------- 9 @@ -941,6 +1002,7 @@ -- by default, user-defined ones cannot EXPLAIN (VERBOSE, COSTS OFF) SELECT count(c3) FROM ft1 t1 WHERE t1.c1 = postgres_fdw_abs(t1.c2); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ----------------------------------------------------------- Aggregate @@ -952,6 +1014,7 @@ (6 rows) SELECT count(c3) FROM ft1 t1 WHERE t1.c1 = postgres_fdw_abs(t1.c2); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree count ------- 9 @@ -959,6 +1022,7 @@ EXPLAIN (VERBOSE, COSTS OFF) SELECT count(c3) FROM ft1 t1 WHERE t1.c1 === t1.c2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ----------------------------------------------------------- Aggregate @@ -970,6 +1034,7 @@ (6 rows) SELECT count(c3) FROM ft1 t1 WHERE t1.c1 === t1.c2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree count ------- 9 @@ -978,6 +1043,7 @@ -- ORDER BY can be shipped, though EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE t1.c1 === t1.c2 order by t1.c2 limit 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ---------------------------------------------------------------------------------------------------------- Limit @@ -989,6 +1055,7 @@ (6 rows) SELECT * FROM ft1 t1 WHERE t1.c1 === t1.c2 order by t1.c2 limit 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 ----+----+-------+------------------------------+--------------------------+----+------------+----- 1 | 1 | 00001 | Fri Jan 02 00:00:00 1970 PST | Fri Jan 02 00:00:00 1970 | 1 | 1 | foo @@ -1001,6 +1068,7 @@ -- ... now they can be shipped EXPLAIN (VERBOSE, COSTS OFF) SELECT count(c3) FROM ft1 t1 WHERE t1.c1 = postgres_fdw_abs(t1.c2); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ----------------------------------------------------------------------------------------------- Foreign Scan @@ -1010,6 +1078,7 @@ (4 rows) SELECT count(c3) FROM ft1 t1 WHERE t1.c1 = postgres_fdw_abs(t1.c2); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree count ------- 9 @@ -1017,6 +1086,7 @@ EXPLAIN (VERBOSE, COSTS OFF) SELECT count(c3) FROM ft1 t1 WHERE t1.c1 === t1.c2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ----------------------------------------------------------------------------------------- Foreign Scan @@ -1026,6 +1096,7 @@ (4 rows) SELECT count(c3) FROM ft1 t1 WHERE t1.c1 === t1.c2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree count ------- 9 @@ -1034,6 +1105,7 @@ -- and both ORDER BY and LIMIT can be shipped EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE t1.c1 === t1.c2 order by t1.c2 limit 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------ Foreign Scan on public.ft1 t1 @@ -1042,6 +1114,7 @@ (3 rows) SELECT * FROM ft1 t1 WHERE t1.c1 === t1.c2 order by t1.c2 limit 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 ----+----+-------+------------------------------+--------------------------+----+------------+----- 1 | 1 | 00001 | Fri Jan 02 00:00:00 1970 PST | Fri Jan 02 00:00:00 1970 | 1 | 1 | foo @@ -1050,6 +1123,7 @@ -- Test CASE pushdown EXPLAIN (VERBOSE, COSTS OFF) SELECT c1,c2,c3 FROM ft2 WHERE CASE WHEN c1 > 990 THEN c1 END < 1000 ORDER BY c1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan on public.ft2 @@ -1058,6 +1132,7 @@ (3 rows) SELECT c1,c2,c3 FROM ft2 WHERE CASE WHEN c1 > 990 THEN c1 END < 1000 ORDER BY c1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 -----+----+------- 991 | 1 | 00991 @@ -1074,6 +1149,7 @@ -- Nested CASE EXPLAIN (VERBOSE, COSTS OFF) SELECT c1,c2,c3 FROM ft2 WHERE CASE CASE WHEN c2 > 0 THEN c2 END WHEN 100 THEN 601 WHEN c2 THEN c2 ELSE 0 END > 600 ORDER BY c1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan on public.ft2 @@ -1082,6 +1158,7 @@ (3 rows) SELECT c1,c2,c3 FROM ft2 WHERE CASE CASE WHEN c2 > 0 THEN c2 END WHEN 100 THEN 601 WHEN c2 THEN c2 ELSE 0 END > 600 ORDER BY c1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 ----+----+---- (0 rows) @@ -1089,6 +1166,7 @@ -- CASE arg WHEN EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 WHERE c1 > (CASE mod(c1, 4) WHEN 0 THEN 1 WHEN 2 THEN 50 ELSE 100 END); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan on public.ft1 @@ -1099,6 +1177,7 @@ -- CASE cannot be pushed down because of unshippable arg clause EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 WHERE c1 > (CASE random()::integer WHEN 0 THEN 1 WHEN 2 THEN 50 ELSE 100 END); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ----------------------------------------------------------------------------------------- Foreign Scan on public.ft1 @@ -1110,6 +1189,7 @@ -- these are shippable EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 WHERE CASE c6 WHEN 'foo' THEN true ELSE c3 < 'bar' END; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan on public.ft1 @@ -1119,6 +1199,7 @@ EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 WHERE CASE c3 WHEN c6 THEN true ELSE c3 < 'bar' END; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------- Foreign Scan on public.ft1 @@ -1129,6 +1210,7 @@ -- but this is not because of collation EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 WHERE CASE c3 COLLATE "C" WHEN c6 THEN true ELSE c3 < 'bar' END; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------- Foreign Scan on public.ft1 @@ -1144,6 +1226,7 @@ EXPLAIN (VERBOSE, COSTS OFF) SELECT c1, to_tsvector('custom_search'::regconfig, c3) FROM ft1 WHERE c1 = 642 AND length(to_tsvector('custom_search'::regconfig, c3)) > 0; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------- Foreign Scan on public.ft1 @@ -1154,6 +1237,7 @@ SELECT c1, to_tsvector('custom_search'::regconfig, c3) FROM ft1 WHERE c1 = 642 AND length(to_tsvector('custom_search'::regconfig, c3)) > 0; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | to_tsvector -----+------------- 642 | '00642':1 @@ -1166,6 +1250,7 @@ EXPLAIN (VERBOSE, COSTS OFF) SELECT c1, to_tsvector('custom_search'::regconfig, c3) FROM ft1 WHERE c1 = 642 AND length(to_tsvector('custom_search'::regconfig, c3)) > 0; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan on public.ft1 @@ -1175,6 +1260,7 @@ SELECT c1, to_tsvector('custom_search'::regconfig, c3) FROM ft1 WHERE c1 = 642 AND length(to_tsvector('custom_search'::regconfig, c3)) > 0; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | to_tsvector -----+------------- 642 | '00642':1 @@ -1187,6 +1273,7 @@ -- collations EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft2 ORDER BY ft2.c1, random(); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------- Sort @@ -1199,6 +1286,7 @@ EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft2 ORDER BY ft2.c1, ft2.c3 collate "C"; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------- Sort @@ -1217,6 +1305,7 @@ UNION ALL SELECT 2 AS type,c1 FROM ft2 ) a ORDER BY type,c1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN --------------------------------------------------------------------------------- Merge Append @@ -1235,6 +1324,7 @@ UNION ALL SELECT 2 AS type,c1 FROM ft2 ) a ORDER BY type; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN --------------------------------------------------- Merge Append @@ -1257,6 +1347,7 @@ -- join two tables EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Foreign Scan @@ -1266,6 +1357,7 @@ (4 rows) SELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c1 -----+----- 101 | 101 @@ -1283,6 +1375,7 @@ -- join three tables EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, t2.c2, t3.c3 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) JOIN ft4 t3 ON (t3.c1 = t1.c1) ORDER BY t1.c3, t1.c1 OFFSET 10 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -1292,6 +1385,7 @@ (4 rows) SELECT t1.c1, t2.c2, t3.c3 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) JOIN ft4 t3 ON (t3.c1 = t1.c1) ORDER BY t1.c3, t1.c1 OFFSET 10 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 ----+----+-------- 22 | 2 | AAA022 @@ -1309,6 +1403,7 @@ -- left outer join EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, t2.c1 FROM ft4 t1 LEFT JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Foreign Scan @@ -1318,6 +1413,7 @@ (4 rows) SELECT t1.c1, t2.c1 FROM ft4 t1 LEFT JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c1 ----+---- 22 | @@ -1335,6 +1431,7 @@ -- left outer join three tables EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -1344,6 +1441,7 @@ (4 rows) SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 ----+----+-------- 11 | 1 | @@ -1363,6 +1461,7 @@ -- non-nullable side is pushed into non-nullable side EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, t1.c2, t2.c1, t2.c2 FROM ft4 t1 LEFT JOIN (SELECT * FROM ft5 WHERE c1 < 10) t2 ON (t1.c1 = t2.c1) WHERE t1.c1 < 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -1372,6 +1471,7 @@ (4 rows) SELECT t1.c1, t1.c2, t2.c1, t2.c2 FROM ft4 t1 LEFT JOIN (SELECT * FROM ft5 WHERE c1 < 10) t2 ON (t1.c1 = t2.c1) WHERE t1.c1 < 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c1 | c2 ----+----+----+---- 2 | 3 | | @@ -1385,6 +1485,7 @@ EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, t1.c2, t2.c1, t2.c2 FROM ft4 t1 LEFT JOIN (SELECT * FROM ft5 WHERE c1 < 10) t2 ON (t1.c1 = t2.c1) WHERE (t2.c1 < 10 OR t2.c1 IS NULL) AND t1.c1 < 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -1395,6 +1496,7 @@ SELECT t1.c1, t1.c2, t2.c1, t2.c2 FROM ft4 t1 LEFT JOIN (SELECT * FROM ft5 WHERE c1 < 10) t2 ON (t1.c1 = t2.c1) WHERE (t2.c1 < 10 OR t2.c1 IS NULL) AND t1.c1 < 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c1 | c2 ----+----+----+---- 2 | 3 | | @@ -1406,6 +1508,7 @@ -- right outer join EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, t2.c1 FROM ft5 t1 RIGHT JOIN ft4 t2 ON (t1.c1 = t2.c1) ORDER BY t2.c1, t1.c1 OFFSET 10 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Foreign Scan @@ -1415,6 +1518,7 @@ (4 rows) SELECT t1.c1, t2.c1 FROM ft5 t1 RIGHT JOIN ft4 t2 ON (t1.c1 = t2.c1) ORDER BY t2.c1, t1.c1 OFFSET 10 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c1 ----+---- | 22 @@ -1432,6 +1536,7 @@ -- right outer join three tables EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -1441,6 +1546,7 @@ (4 rows) SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 ----+----+-------- 22 | 2 | AAA022 @@ -1458,6 +1564,7 @@ -- full outer join EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, t2.c1 FROM ft4 t1 FULL JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 45 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Foreign Scan @@ -1467,6 +1574,7 @@ (4 rows) SELECT t1.c1, t2.c1 FROM ft4 t1 FULL JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 45 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c1 -----+---- 92 | @@ -1485,6 +1593,7 @@ -- a. the joining relations are both base relations EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, t2.c1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -1494,6 +1603,7 @@ (4 rows) SELECT t1.c1, t2.c1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c1 ----+---- 50 | @@ -1508,6 +1618,7 @@ EXPLAIN (VERBOSE, COSTS OFF) SELECT 1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t2 ON (TRUE) OFFSET 10 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -1517,6 +1628,7 @@ (4 rows) SELECT 1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t2 ON (TRUE) OFFSET 10 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ?column? ---------- 1 @@ -1535,6 +1647,7 @@ -- relation EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, ss.a, ss.b FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT t2.c1, t3.c1 FROM ft4 t2 LEFT JOIN ft5 t3 ON (t2.c1 = t3.c1) WHERE (t2.c1 between 50 and 60)) ss(a, b) ON (t1.c1 = ss.a) ORDER BY t1.c1, ss.a, ss.b; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -1544,6 +1657,7 @@ (4 rows) SELECT t1.c1, ss.a, ss.b FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT t2.c1, t3.c1 FROM ft4 t2 LEFT JOIN ft5 t3 ON (t2.c1 = t3.c1) WHERE (t2.c1 between 50 and 60)) ss(a, b) ON (t1.c1 = ss.a) ORDER BY t1.c1, ss.a, ss.b; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | a | b ----+----+---- 50 | 50 | @@ -1557,6 +1671,7 @@ -- c. test deparsing the remote query as nested subqueries EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, ss.a, ss.b FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT t2.c1, t3.c1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t2 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t3 ON (t2.c1 = t3.c1) WHERE t2.c1 IS NULL OR t2.c1 IS NOT NULL) ss(a, b) ON (t1.c1 = ss.a) ORDER BY t1.c1, ss.a, ss.b; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -1566,6 +1681,7 @@ (4 rows) SELECT t1.c1, ss.a, ss.b FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT t2.c1, t3.c1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t2 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t3 ON (t2.c1 = t3.c1) WHERE t2.c1 IS NULL OR t2.c1 IS NOT NULL) ss(a, b) ON (t1.c1 = ss.a) ORDER BY t1.c1, ss.a, ss.b; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | a | b ----+----+---- 50 | 50 | @@ -1581,54 +1697,15 @@ -- d. test deparsing rowmarked relations as subqueries EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, ss.a, ss.b FROM (SELECT c1 FROM "S 1"."T 3" WHERE c1 = 50) t1 INNER JOIN (SELECT t2.c1, t3.c1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t2 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t3 ON (t2.c1 = t3.c1) WHERE t2.c1 IS NULL OR t2.c1 IS NOT NULL) ss(a, b) ON (TRUE) ORDER BY t1.c1, ss.a, ss.b FOR UPDATE OF t1; - QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - LockRows - Output: "T 3".c1, ft4.c1, ft5.c1, "T 3".ctid, ft4.*, ft5.* - -> Nested Loop - Output: "T 3".c1, ft4.c1, ft5.c1, "T 3".ctid, ft4.*, ft5.* - -> Foreign Scan - Output: ft4.c1, ft4.*, ft5.c1, ft5.* - Relations: (public.ft4) FULL JOIN (public.ft5) - Remote SQL: SELECT s8.c1, s8.c2, s9.c1, s9.c2 FROM ((SELECT c1, ROW(c1, c2, c3) FROM "S 1"."T 3" WHERE ((c1 >= 50)) AND ((c1 <= 60))) s8(c1, c2) FULL JOIN (SELECT c1, ROW(c1, c2, c3) FROM "S 1"."T 4" WHERE ((c1 >= 50)) AND ((c1 <= 60))) s9(c1, c2) ON (((s8.c1 = s9.c1)))) WHERE (((s8.c1 IS NULL) OR (s8.c1 IS NOT NULL))) ORDER BY s8.c1 ASC NULLS LAST, s9.c1 ASC NULLS LAST - -> Sort - Output: ft4.c1, ft4.*, ft5.c1, ft5.* - Sort Key: ft4.c1, ft5.c1 - -> Hash Full Join - Output: ft4.c1, ft4.*, ft5.c1, ft5.* - Hash Cond: (ft4.c1 = ft5.c1) - Filter: ((ft4.c1 IS NULL) OR (ft4.c1 IS NOT NULL)) - -> Foreign Scan on public.ft4 - Output: ft4.c1, ft4.* - Remote SQL: SELECT c1, c2, c3 FROM "S 1"."T 3" WHERE ((c1 >= 50)) AND ((c1 <= 60)) - -> Hash - Output: ft5.c1, ft5.* - -> Foreign Scan on public.ft5 - Output: ft5.c1, ft5.* - Remote SQL: SELECT c1, c2, c3 FROM "S 1"."T 4" WHERE ((c1 >= 50)) AND ((c1 <= 60)) - -> Materialize - Output: "T 3".c1, "T 3".ctid - -> Seq Scan on "S 1"."T 3" - Output: "T 3".c1, "T 3".ctid - Filter: ("T 3".c1 = 50) -(28 rows) - +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +ERROR: could not find junk ctid2 column SELECT t1.c1, ss.a, ss.b FROM (SELECT c1 FROM "S 1"."T 3" WHERE c1 = 50) t1 INNER JOIN (SELECT t2.c1, t3.c1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t2 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t3 ON (t2.c1 = t3.c1) WHERE t2.c1 IS NULL OR t2.c1 IS NOT NULL) ss(a, b) ON (TRUE) ORDER BY t1.c1, ss.a, ss.b FOR UPDATE OF t1; - c1 | a | b -----+----+---- - 50 | 50 | - 50 | 52 | - 50 | 54 | 54 - 50 | 56 | - 50 | 58 | - 50 | 60 | 60 - 50 | | 51 - 50 | | 57 -(8 rows) - +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +ERROR: could not find junk ctid2 column -- full outer join + inner join EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, t2.c1, t3.c1 FROM ft4 t1 INNER JOIN ft5 t2 ON (t1.c1 = t2.c1 + 1 and t1.c1 between 50 and 60) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) ORDER BY t1.c1, t2.c1, t3.c1 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Foreign Scan @@ -1638,6 +1715,7 @@ (4 rows) SELECT t1.c1, t2.c1, t3.c1 FROM ft4 t1 INNER JOIN ft5 t2 ON (t1.c1 = t2.c1 + 1 and t1.c1 between 50 and 60) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) ORDER BY t1.c1, t2.c1, t3.c1 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c1 | c1 ----+----+---- 52 | 51 | @@ -1655,6 +1733,7 @@ -- full outer join three tables EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -1664,6 +1743,7 @@ (4 rows) SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 ----+----+-------- 11 | 1 | @@ -1681,6 +1761,7 @@ -- full outer join + right outer join EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -1690,6 +1771,7 @@ (4 rows) SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 ----+----+-------- 22 | 2 | AAA022 @@ -1707,6 +1789,7 @@ -- right outer join + full outer join EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -1716,6 +1799,7 @@ (4 rows) SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 ----+----+-------- 11 | 1 | @@ -1733,6 +1817,7 @@ -- full outer join + left outer join EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -1742,6 +1827,7 @@ (4 rows) SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 ----+----+-------- 11 | 1 | @@ -1759,6 +1845,7 @@ -- left outer join + full outer join EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -1768,6 +1855,7 @@ (4 rows) SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 ----+----+-------- 11 | 1 | @@ -1786,6 +1874,7 @@ -- right outer join + left outer join EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -1795,6 +1884,7 @@ (4 rows) SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 ----+----+-------- 11 | 1 | @@ -1813,6 +1903,7 @@ -- left outer join + right outer join EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Foreign Scan @@ -1822,6 +1913,7 @@ (4 rows) SELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 ----+----+-------- 22 | 2 | AAA022 @@ -1839,6 +1931,7 @@ -- full outer join + WHERE clause, only matched rows EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, t2.c1 FROM ft4 t1 FULL JOIN ft5 t2 ON (t1.c1 = t2.c1) WHERE (t1.c1 = t2.c1 OR t1.c1 IS NULL) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------ Limit @@ -1853,6 +1946,7 @@ (9 rows) SELECT t1.c1, t2.c1 FROM ft4 t1 FULL JOIN ft5 t2 ON (t1.c1 = t2.c1) WHERE (t1.c1 = t2.c1 OR t1.c1 IS NULL) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c1 ----+---- 66 | 66 @@ -1870,6 +1964,7 @@ -- full outer join + WHERE clause with shippable extensions set EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, t2.c2, t1.c3 FROM ft1 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) WHERE postgres_fdw_abs(t1.c1) > 0 OFFSET 10 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Foreign Scan @@ -1882,6 +1977,7 @@ -- full outer join + WHERE clause with shippable extensions not set EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, t2.c2, t1.c3 FROM ft1 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) WHERE postgres_fdw_abs(t1.c1) > 0 OFFSET 10 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------- Limit @@ -1898,6 +1994,7 @@ -- tests whole-row reference for row marks EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR UPDATE OF t1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -1907,6 +2004,7 @@ (4 rows) SELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR UPDATE OF t1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c1 -----+----- 101 | 101 @@ -1923,6 +2021,7 @@ EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR UPDATE; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -1932,6 +2031,7 @@ (4 rows) SELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR UPDATE; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c1 -----+----- 101 | 101 @@ -1949,6 +2049,7 @@ -- join two tables with FOR SHARE clause EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR SHARE OF t1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -1958,6 +2059,7 @@ (4 rows) SELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR SHARE OF t1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c1 -----+----- 101 | 101 @@ -1974,6 +2076,7 @@ EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR SHARE; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -1983,6 +2086,7 @@ (4 rows) SELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR SHARE; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c1 -----+----- 101 | 101 @@ -2000,6 +2104,7 @@ -- join in CTE EXPLAIN (VERBOSE, COSTS OFF) WITH t (c1_1, c1_3, c2_1) AS MATERIALIZED (SELECT t1.c1, t1.c3, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1)) SELECT c1_1, c2_1 FROM t ORDER BY c1_3, c1_1 OFFSET 100 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------- Limit @@ -2017,6 +2122,7 @@ (12 rows) WITH t (c1_1, c1_3, c2_1) AS MATERIALIZED (SELECT t1.c1, t1.c3, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1)) SELECT c1_1, c2_1 FROM t ORDER BY c1_3, c1_1 OFFSET 100 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1_1 | c2_1 ------+------ 101 | 101 @@ -2034,6 +2140,7 @@ -- ctid with whole-row reference EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.ctid, t1, t2, t1.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -2045,6 +2152,7 @@ -- SEMI JOIN EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1 FROM ft1 t1 WHERE EXISTS (SELECT 1 FROM ft2 t2 WHERE t1.c1 = t2.c1) ORDER BY t1.c1 OFFSET 100 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -2054,6 +2162,7 @@ (4 rows) SELECT t1.c1 FROM ft1 t1 WHERE EXISTS (SELECT 1 FROM ft2 t2 WHERE t1.c1 = t2.c1) ORDER BY t1.c1 OFFSET 100 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 ----- 101 @@ -2071,6 +2180,7 @@ -- ANTI JOIN, not pushed down EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1 FROM ft1 t1 WHERE NOT EXISTS (SELECT 1 FROM ft2 t2 WHERE t1.c1 = t2.c2) ORDER BY t1.c1 OFFSET 100 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN --------------------------------------------------------------------------------------- Limit @@ -2087,6 +2197,7 @@ (11 rows) SELECT t1.c1 FROM ft1 t1 WHERE NOT EXISTS (SELECT 1 FROM ft2 t2 WHERE t1.c1 = t2.c2) ORDER BY t1.c1 OFFSET 100 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 ----- 110 @@ -2104,6 +2215,7 @@ -- CROSS JOIN can be pushed down EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, t2.c1 FROM ft1 t1 CROSS JOIN ft2 t2 ORDER BY t1.c1, t2.c1 OFFSET 100 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -2113,6 +2225,7 @@ (4 rows) SELECT t1.c1, t2.c1 FROM ft1 t1 CROSS JOIN ft2 t2 ORDER BY t1.c1, t2.c1 OFFSET 100 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c1 ----+----- 1 | 101 @@ -2130,6 +2243,7 @@ -- different server, not pushed down. No result expected. EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, t2.c1 FROM ft5 t1 JOIN ft6 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 100 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN --------------------------------------------------------------------------------------- Limit @@ -2148,6 +2262,7 @@ (13 rows) SELECT t1.c1, t2.c1 FROM ft5 t1 JOIN ft6 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 100 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c1 ----+---- (0 rows) @@ -2156,6 +2271,7 @@ -- JOIN since c8 in both tables has same value. EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, t2.c1 FROM ft1 t1 LEFT JOIN ft2 t2 ON (t1.c8 = t2.c8) ORDER BY t1.c1, t2.c1 OFFSET 100 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------- Limit @@ -2181,6 +2297,7 @@ (20 rows) SELECT t1.c1, t2.c1 FROM ft1 t1 LEFT JOIN ft2 t2 ON (t1.c8 = t2.c8) ORDER BY t1.c1, t2.c1 OFFSET 100 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c1 ----+----- 1 | 101 @@ -2198,6 +2315,7 @@ -- unsafe conditions on one side (c8 has a UDT), not pushed down. EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, t2.c1 FROM ft1 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) WHERE t1.c8 = 'foo' ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ----------------------------------------------------------------------------- Limit @@ -2220,6 +2338,7 @@ (17 rows) SELECT t1.c1, t2.c1 FROM ft1 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) WHERE t1.c8 = 'foo' ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c1 -----+----- 101 | 101 @@ -2240,6 +2359,7 @@ -- into one of the joining sides. EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) WHERE t1.c8 = t2.c8 ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------- Limit @@ -2255,6 +2375,7 @@ (10 rows) SELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) WHERE t1.c8 = t2.c8 ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c1 -----+----- 101 | 101 @@ -2272,6 +2393,7 @@ -- Aggregate after UNION, for testing setrefs EXPLAIN (VERBOSE, COSTS OFF) SELECT t1c1, avg(t1c1 + t2c1) FROM (SELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) UNION SELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1)) AS t (t1c1, t2c1) GROUP BY t1c1 ORDER BY t1c1 OFFSET 100 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------- Limit @@ -2297,6 +2419,7 @@ (20 rows) SELECT t1c1, avg(t1c1 + t2c1) FROM (SELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) UNION SELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1)) AS t (t1c1, t2c1) GROUP BY t1c1 ORDER BY t1c1 OFFSET 100 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree t1c1 | avg ------+---------------------- 101 | 202.0000000000000000 @@ -2314,6 +2437,7 @@ -- join with lateral reference EXPLAIN (VERBOSE, COSTS OFF) SELECT t1."C 1" FROM "S 1"."T 1" t1, LATERAL (SELECT DISTINCT t2.c1, t3.c1 FROM ft1 t2, ft2 t3 WHERE t2.c1 = t3.c1 AND t2.c2 = t1.c2) q ORDER BY t1."C 1" OFFSET 10 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Limit @@ -2336,6 +2460,7 @@ (17 rows) SELECT t1."C 1" FROM "S 1"."T 1" t1, LATERAL (SELECT DISTINCT t2.c1, t3.c1 FROM ft1 t2, ft2 t3 WHERE t2.c1 = t3.c1 AND t2.c2 = t1.c2) q ORDER BY t1."C 1" OFFSET 10 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree C 1 ----- 1 @@ -2353,6 +2478,7 @@ -- join with pseudoconstant quals EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1 AND CURRENT_USER = SESSION_USER) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Limit @@ -2371,6 +2497,7 @@ -- unable to push {ft1, ft2} EXPLAIN (VERBOSE, COSTS OFF) SELECT q.a, ft2.c1 FROM (SELECT 13 FROM ft1 WHERE c1 = 13) q(a) RIGHT JOIN ft2 ON (q.a = ft2.c1) WHERE ft2.c1 BETWEEN 10 AND 15; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN --------------------------------------------------------------------------------------------------------------------------- Nested Loop Left Join @@ -2387,6 +2514,7 @@ (11 rows) SELECT q.a, ft2.c1 FROM (SELECT 13 FROM ft1 WHERE c1 = 13) q(a) RIGHT JOIN ft2 ON (q.a = ft2.c1) WHERE ft2.c1 BETWEEN 10 AND 15; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree a | c1 ----+---- | 10 @@ -2400,6 +2528,7 @@ -- ok to push {ft1, ft2} but not {ft1, ft2, ft4} EXPLAIN (VERBOSE, COSTS OFF) SELECT ft4.c1, q.* FROM ft4 LEFT JOIN (SELECT 13, ft1.c1, ft2.c1 FROM ft1 RIGHT JOIN ft2 ON (ft1.c1 = ft2.c1) WHERE ft1.c1 = 12) q(a, b, c) ON (ft4.c1 = q.b) WHERE ft4.c1 BETWEEN 10 AND 15; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Nested Loop Left Join @@ -2417,6 +2546,7 @@ (12 rows) SELECT ft4.c1, q.* FROM ft4 LEFT JOIN (SELECT 13, ft1.c1, ft2.c1 FROM ft1 RIGHT JOIN ft2 ON (ft1.c1 = ft2.c1) WHERE ft1.c1 = 12) q(a, b, c) ON (ft4.c1 = q.b) WHERE ft4.c1 BETWEEN 10 AND 15; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | a | b | c ----+----+----+---- 10 | | | @@ -2426,8 +2556,10 @@ -- join with nullable side with some columns with null values UPDATE ft5 SET c3 = null where c1 % 9 = 0; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree EXPLAIN (VERBOSE, COSTS OFF) SELECT ft5, ft5.c1, ft5.c2, ft5.c3, ft4.c1, ft4.c2 FROM ft5 left join ft4 on ft5.c1 = ft4.c1 WHERE ft4.c1 BETWEEN 10 and 30 ORDER BY ft5.c1, ft4.c1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -2437,6 +2569,7 @@ (4 rows) SELECT ft5, ft5.c1, ft5.c2, ft5.c3, ft4.c1, ft4.c2 FROM ft5 left join ft4 on ft5.c1 = ft4.c1 WHERE ft4.c1 BETWEEN 10 and 30 ORDER BY ft5.c1, ft4.c1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ft5 | c1 | c2 | c3 | c1 | c2 ----------------+----+----+--------+----+---- (12,13,AAA012) | 12 | 13 | AAA012 | 12 | 13 @@ -2449,158 +2582,33 @@ -- (this case used to have EPQ-related planning problems) CREATE TABLE local_tbl (c1 int NOT NULL, c2 int NOT NULL, c3 text, CONSTRAINT local_tbl_pkey PRIMARY KEY (c1)); INSERT INTO local_tbl SELECT id, id % 10, to_char(id, 'FM0000') FROM generate_series(1, 1000) id; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ANALYZE local_tbl; SET enable_nestloop TO false; SET enable_hashjoin TO false; EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1, ft2, ft4, ft5, local_tbl WHERE ft1.c1 = ft2.c1 AND ft1.c2 = ft4.c1 AND ft1.c2 = ft5.c1 AND ft1.c2 = local_tbl.c1 AND ft1.c1 < 100 AND ft2.c1 < 100 FOR UPDATE; - QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - LockRows - Output: ft1.c1, ft1.c2, ft1.c3, ft1.c4, ft1.c5, ft1.c6, ft1.c7, ft1.c8, ft2.c1, ft2.c2, ft2.c3, ft2.c4, ft2.c5, ft2.c6, ft2.c7, ft2.c8, ft4.c1, ft4.c2, ft4.c3, ft5.c1, ft5.c2, ft5.c3, local_tbl.c1, local_tbl.c2, local_tbl.c3, ft1.*, ft2.*, ft4.*, ft5.*, local_tbl.ctid - -> Merge Join - Output: ft1.c1, ft1.c2, ft1.c3, ft1.c4, ft1.c5, ft1.c6, ft1.c7, ft1.c8, ft2.c1, ft2.c2, ft2.c3, ft2.c4, ft2.c5, ft2.c6, ft2.c7, ft2.c8, ft4.c1, ft4.c2, ft4.c3, ft5.c1, ft5.c2, ft5.c3, local_tbl.c1, local_tbl.c2, local_tbl.c3, ft1.*, ft2.*, ft4.*, ft5.*, local_tbl.ctid - Inner Unique: true - Merge Cond: (ft1.c2 = local_tbl.c1) - -> Foreign Scan - Output: ft1.c1, ft1.c2, ft1.c3, ft1.c4, ft1.c5, ft1.c6, ft1.c7, ft1.c8, ft1.*, ft2.c1, ft2.c2, ft2.c3, ft2.c4, ft2.c5, ft2.c6, ft2.c7, ft2.c8, ft2.*, ft4.c1, ft4.c2, ft4.c3, ft4.*, ft5.c1, ft5.c2, ft5.c3, ft5.* - Relations: (((public.ft1) INNER JOIN (public.ft2)) INNER JOIN (public.ft4)) INNER JOIN (public.ft5) - Remote SQL: SELECT r1."C 1", r1.c2, r1.c3, r1.c4, r1.c5, r1.c6, r1.c7, r1.c8, CASE WHEN (r1.*)::text IS NOT NULL THEN ROW(r1."C 1", r1.c2, r1.c3, r1.c4, r1.c5, r1.c6, r1.c7, r1.c8) END, r2."C 1", r2.c2, r2.c3, r2.c4, r2.c5, r2.c6, r2.c7, r2.c8, CASE WHEN (r2.*)::text IS NOT NULL THEN ROW(r2."C 1", r2.c2, r2.c3, r2.c4, r2.c5, r2.c6, r2.c7, r2.c8) END, r3.c1, r3.c2, r3.c3, CASE WHEN (r3.*)::text IS NOT NULL THEN ROW(r3.c1, r3.c2, r3.c3) END, r4.c1, r4.c2, r4.c3, CASE WHEN (r4.*)::text IS NOT NULL THEN ROW(r4.c1, r4.c2, r4.c3) END FROM ((("S 1"."T 1" r1 INNER JOIN "S 1"."T 1" r2 ON (((r2."C 1" = r1."C 1")) AND ((r2."C 1" < 100)) AND ((r1."C 1" < 100)))) INNER JOIN "S 1"."T 3" r3 ON (((r1.c2 = r3.c1)))) INNER JOIN "S 1"."T 4" r4 ON (((r1.c2 = r4.c1)))) ORDER BY r1.c2 ASC NULLS LAST FOR UPDATE OF r1 FOR UPDATE OF r2 FOR UPDATE OF r3 FOR UPDATE OF r4 - -> Merge Join - Output: ft1.c1, ft1.c2, ft1.c3, ft1.c4, ft1.c5, ft1.c6, ft1.c7, ft1.c8, ft1.*, ft2.c1, ft2.c2, ft2.c3, ft2.c4, ft2.c5, ft2.c6, ft2.c7, ft2.c8, ft2.*, ft4.c1, ft4.c2, ft4.c3, ft4.*, ft5.c1, ft5.c2, ft5.c3, ft5.* - Merge Cond: (ft1.c2 = ft5.c1) - -> Merge Join - Output: ft1.c1, ft1.c2, ft1.c3, ft1.c4, ft1.c5, ft1.c6, ft1.c7, ft1.c8, ft1.*, ft2.c1, ft2.c2, ft2.c3, ft2.c4, ft2.c5, ft2.c6, ft2.c7, ft2.c8, ft2.*, ft4.c1, ft4.c2, ft4.c3, ft4.* - Merge Cond: (ft1.c2 = ft4.c1) - -> Sort - Output: ft1.c1, ft1.c2, ft1.c3, ft1.c4, ft1.c5, ft1.c6, ft1.c7, ft1.c8, ft1.*, ft2.c1, ft2.c2, ft2.c3, ft2.c4, ft2.c5, ft2.c6, ft2.c7, ft2.c8, ft2.* - Sort Key: ft1.c2 - -> Merge Join - Output: ft1.c1, ft1.c2, ft1.c3, ft1.c4, ft1.c5, ft1.c6, ft1.c7, ft1.c8, ft1.*, ft2.c1, ft2.c2, ft2.c3, ft2.c4, ft2.c5, ft2.c6, ft2.c7, ft2.c8, ft2.* - Merge Cond: (ft1.c1 = ft2.c1) - -> Sort - Output: ft1.c1, ft1.c2, ft1.c3, ft1.c4, ft1.c5, ft1.c6, ft1.c7, ft1.c8, ft1.* - Sort Key: ft1.c1 - -> Foreign Scan on public.ft1 - Output: ft1.c1, ft1.c2, ft1.c3, ft1.c4, ft1.c5, ft1.c6, ft1.c7, ft1.c8, ft1.* - Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE (("C 1" < 100)) FOR UPDATE - -> Materialize - Output: ft2.c1, ft2.c2, ft2.c3, ft2.c4, ft2.c5, ft2.c6, ft2.c7, ft2.c8, ft2.* - -> Foreign Scan on public.ft2 - Output: ft2.c1, ft2.c2, ft2.c3, ft2.c4, ft2.c5, ft2.c6, ft2.c7, ft2.c8, ft2.* - Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE (("C 1" < 100)) ORDER BY "C 1" ASC NULLS LAST FOR UPDATE - -> Sort - Output: ft4.c1, ft4.c2, ft4.c3, ft4.* - Sort Key: ft4.c1 - -> Foreign Scan on public.ft4 - Output: ft4.c1, ft4.c2, ft4.c3, ft4.* - Remote SQL: SELECT c1, c2, c3 FROM "S 1"."T 3" FOR UPDATE - -> Sort - Output: ft5.c1, ft5.c2, ft5.c3, ft5.* - Sort Key: ft5.c1 - -> Foreign Scan on public.ft5 - Output: ft5.c1, ft5.c2, ft5.c3, ft5.* - Remote SQL: SELECT c1, c2, c3 FROM "S 1"."T 4" FOR UPDATE - -> Index Scan using local_tbl_pkey on public.local_tbl - Output: local_tbl.c1, local_tbl.c2, local_tbl.c3, local_tbl.ctid -(47 rows) - +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +ERROR: could not find junk ctid1 column SELECT * FROM ft1, ft2, ft4, ft5, local_tbl WHERE ft1.c1 = ft2.c1 AND ft1.c2 = ft4.c1 AND ft1.c2 = ft5.c1 AND ft1.c2 = local_tbl.c1 AND ft1.c1 < 100 AND ft2.c1 < 100 FOR UPDATE; - c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 | c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 | c1 | c2 | c3 | c1 | c2 | c3 | c1 | c2 | c3 -----+----+-------+------------------------------+--------------------------+----+------------+-----+----+----+-------+------------------------------+--------------------------+----+------------+-----+----+----+--------+----+----+--------+----+----+------ - 6 | 6 | 00006 | Wed Jan 07 00:00:00 1970 PST | Wed Jan 07 00:00:00 1970 | 6 | 6 | foo | 6 | 6 | 00006 | Wed Jan 07 00:00:00 1970 PST | Wed Jan 07 00:00:00 1970 | 6 | 6 | foo | 6 | 7 | AAA006 | 6 | 7 | AAA006 | 6 | 6 | 0006 - 16 | 6 | 00016 | Sat Jan 17 00:00:00 1970 PST | Sat Jan 17 00:00:00 1970 | 6 | 6 | foo | 16 | 6 | 00016 | Sat Jan 17 00:00:00 1970 PST | Sat Jan 17 00:00:00 1970 | 6 | 6 | foo | 6 | 7 | AAA006 | 6 | 7 | AAA006 | 6 | 6 | 0006 - 26 | 6 | 00026 | Tue Jan 27 00:00:00 1970 PST | Tue Jan 27 00:00:00 1970 | 6 | 6 | foo | 26 | 6 | 00026 | Tue Jan 27 00:00:00 1970 PST | Tue Jan 27 00:00:00 1970 | 6 | 6 | foo | 6 | 7 | AAA006 | 6 | 7 | AAA006 | 6 | 6 | 0006 - 36 | 6 | 00036 | Fri Feb 06 00:00:00 1970 PST | Fri Feb 06 00:00:00 1970 | 6 | 6 | foo | 36 | 6 | 00036 | Fri Feb 06 00:00:00 1970 PST | Fri Feb 06 00:00:00 1970 | 6 | 6 | foo | 6 | 7 | AAA006 | 6 | 7 | AAA006 | 6 | 6 | 0006 - 46 | 6 | 00046 | Mon Feb 16 00:00:00 1970 PST | Mon Feb 16 00:00:00 1970 | 6 | 6 | foo | 46 | 6 | 00046 | Mon Feb 16 00:00:00 1970 PST | Mon Feb 16 00:00:00 1970 | 6 | 6 | foo | 6 | 7 | AAA006 | 6 | 7 | AAA006 | 6 | 6 | 0006 - 56 | 6 | 00056 | Thu Feb 26 00:00:00 1970 PST | Thu Feb 26 00:00:00 1970 | 6 | 6 | foo | 56 | 6 | 00056 | Thu Feb 26 00:00:00 1970 PST | Thu Feb 26 00:00:00 1970 | 6 | 6 | foo | 6 | 7 | AAA006 | 6 | 7 | AAA006 | 6 | 6 | 0006 - 66 | 6 | 00066 | Sun Mar 08 00:00:00 1970 PST | Sun Mar 08 00:00:00 1970 | 6 | 6 | foo | 66 | 6 | 00066 | Sun Mar 08 00:00:00 1970 PST | Sun Mar 08 00:00:00 1970 | 6 | 6 | foo | 6 | 7 | AAA006 | 6 | 7 | AAA006 | 6 | 6 | 0006 - 76 | 6 | 00076 | Wed Mar 18 00:00:00 1970 PST | Wed Mar 18 00:00:00 1970 | 6 | 6 | foo | 76 | 6 | 00076 | Wed Mar 18 00:00:00 1970 PST | Wed Mar 18 00:00:00 1970 | 6 | 6 | foo | 6 | 7 | AAA006 | 6 | 7 | AAA006 | 6 | 6 | 0006 - 86 | 6 | 00086 | Sat Mar 28 00:00:00 1970 PST | Sat Mar 28 00:00:00 1970 | 6 | 6 | foo | 86 | 6 | 00086 | Sat Mar 28 00:00:00 1970 PST | Sat Mar 28 00:00:00 1970 | 6 | 6 | foo | 6 | 7 | AAA006 | 6 | 7 | AAA006 | 6 | 6 | 0006 - 96 | 6 | 00096 | Tue Apr 07 00:00:00 1970 PST | Tue Apr 07 00:00:00 1970 | 6 | 6 | foo | 96 | 6 | 00096 | Tue Apr 07 00:00:00 1970 PST | Tue Apr 07 00:00:00 1970 | 6 | 6 | foo | 6 | 7 | AAA006 | 6 | 7 | AAA006 | 6 | 6 | 0006 -(10 rows) - +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +ERROR: could not find junk ctid1 column RESET enable_nestloop; RESET enable_hashjoin; -- test that add_paths_with_pathkeys_for_rel() arranges for the epq_path to -- return columns needed by the parent ForeignScan node EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM local_tbl LEFT JOIN (SELECT ft1.*, COALESCE(ft1.c3 || ft2.c3, 'foobar') FROM ft1 INNER JOIN ft2 ON (ft1.c1 = ft2.c1 AND ft1.c1 < 100)) ss ON (local_tbl.c1 = ss.c1) ORDER BY local_tbl.c1 FOR UPDATE OF local_tbl; - QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - LockRows - Output: local_tbl.c1, local_tbl.c2, local_tbl.c3, ft1.c1, ft1.c2, ft1.c3, ft1.c4, ft1.c5, ft1.c6, ft1.c7, ft1.c8, (COALESCE((ft1.c3 || ft2.c3), 'foobar'::text)), local_tbl.ctid, ft1.*, ft2.* - -> Merge Left Join - Output: local_tbl.c1, local_tbl.c2, local_tbl.c3, ft1.c1, ft1.c2, ft1.c3, ft1.c4, ft1.c5, ft1.c6, ft1.c7, ft1.c8, (COALESCE((ft1.c3 || ft2.c3), 'foobar'::text)), local_tbl.ctid, ft1.*, ft2.* - Merge Cond: (local_tbl.c1 = ft1.c1) - -> Index Scan using local_tbl_pkey on public.local_tbl - Output: local_tbl.c1, local_tbl.c2, local_tbl.c3, local_tbl.ctid - -> Materialize - Output: ft1.c1, ft1.c2, ft1.c3, ft1.c4, ft1.c5, ft1.c6, ft1.c7, ft1.c8, ft1.*, ft2.*, (COALESCE((ft1.c3 || ft2.c3), 'foobar'::text)) - -> Foreign Scan - Output: ft1.c1, ft1.c2, ft1.c3, ft1.c4, ft1.c5, ft1.c6, ft1.c7, ft1.c8, ft1.*, ft2.*, COALESCE((ft1.c3 || ft2.c3), 'foobar'::text) - Relations: (public.ft1) INNER JOIN (public.ft2) - Remote SQL: SELECT r4."C 1", r4.c2, r4.c3, r4.c4, r4.c5, r4.c6, r4.c7, r4.c8, CASE WHEN (r4.*)::text IS NOT NULL THEN ROW(r4."C 1", r4.c2, r4.c3, r4.c4, r4.c5, r4.c6, r4.c7, r4.c8) END, CASE WHEN (r5.*)::text IS NOT NULL THEN ROW(r5."C 1", r5.c2, r5.c3, r5.c4, r5.c5, r5.c6, r5.c7, r5.c8) END, r5.c3 FROM ("S 1"."T 1" r4 INNER JOIN "S 1"."T 1" r5 ON (((r5."C 1" = r4."C 1")) AND ((r4."C 1" < 100)))) ORDER BY r4."C 1" ASC NULLS LAST - -> Result - Output: ft1.c1, ft1.c2, ft1.c3, ft1.c4, ft1.c5, ft1.c6, ft1.c7, ft1.c8, ft1.*, ft2.*, ft2.c3 - -> Sort - Output: ft1.c1, ft1.c2, ft1.c3, ft1.c4, ft1.c5, ft1.c6, ft1.c7, ft1.c8, ft1.*, ft2.*, (COALESCE((ft1.c3 || ft2.c3), 'foobar'::text)), ft2.c3 - Sort Key: ft1.c1 - -> Hash Join - Output: ft1.c1, ft1.c2, ft1.c3, ft1.c4, ft1.c5, ft1.c6, ft1.c7, ft1.c8, ft1.*, ft2.*, COALESCE((ft1.c3 || ft2.c3), 'foobar'::text), ft2.c3 - Hash Cond: (ft1.c1 = ft2.c1) - -> Foreign Scan on public.ft1 - Output: ft1.c1, ft1.c2, ft1.c3, ft1.c4, ft1.c5, ft1.c6, ft1.c7, ft1.c8, ft1.* - Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE (("C 1" < 100)) - -> Hash - Output: ft2.*, ft2.c1, ft2.c3 - -> Foreign Scan on public.ft2 - Output: ft2.*, ft2.c1, ft2.c3 - Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" -(29 rows) - +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +ERROR: could not find junk ctid2 column ALTER SERVER loopback OPTIONS (DROP extensions); ALTER SERVER loopback OPTIONS (ADD fdw_startup_cost '10000.0'); EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM local_tbl LEFT JOIN (SELECT ft1.* FROM ft1 INNER JOIN ft2 ON (ft1.c1 = ft2.c1 AND ft1.c1 < 100 AND (ft1.c1 - postgres_fdw_abs(ft2.c2)) = 0)) ss ON (local_tbl.c3 = ss.c3) ORDER BY local_tbl.c1 FOR UPDATE OF local_tbl; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - LockRows - Output: local_tbl.c1, local_tbl.c2, local_tbl.c3, ft1.c1, ft1.c2, ft1.c3, ft1.c4, ft1.c5, ft1.c6, ft1.c7, ft1.c8, local_tbl.ctid, ft1.*, ft2.* - -> Nested Loop Left Join - Output: local_tbl.c1, local_tbl.c2, local_tbl.c3, ft1.c1, ft1.c2, ft1.c3, ft1.c4, ft1.c5, ft1.c6, ft1.c7, ft1.c8, local_tbl.ctid, ft1.*, ft2.* - Join Filter: (local_tbl.c3 = ft1.c3) - -> Index Scan using local_tbl_pkey on public.local_tbl - Output: local_tbl.c1, local_tbl.c2, local_tbl.c3, local_tbl.ctid - -> Materialize - Output: ft1.c1, ft1.c2, ft1.c3, ft1.c4, ft1.c5, ft1.c6, ft1.c7, ft1.c8, ft1.*, ft2.* - -> Foreign Scan - Output: ft1.c1, ft1.c2, ft1.c3, ft1.c4, ft1.c5, ft1.c6, ft1.c7, ft1.c8, ft1.*, ft2.* - Filter: ((ft1.c1 - postgres_fdw_abs(ft2.c2)) = 0) - Relations: (public.ft1) INNER JOIN (public.ft2) - Remote SQL: SELECT r4."C 1", r4.c2, r4.c3, r4.c4, r4.c5, r4.c6, r4.c7, r4.c8, CASE WHEN (r4.*)::text IS NOT NULL THEN ROW(r4."C 1", r4.c2, r4.c3, r4.c4, r4.c5, r4.c6, r4.c7, r4.c8) END, CASE WHEN (r5.*)::text IS NOT NULL THEN ROW(r5."C 1", r5.c2, r5.c3, r5.c4, r5.c5, r5.c6, r5.c7, r5.c8) END, r5.c2 FROM ("S 1"."T 1" r4 INNER JOIN "S 1"."T 1" r5 ON (((r5."C 1" = r4."C 1")) AND ((r4."C 1" < 100)))) ORDER BY r4.c3 ASC NULLS LAST - -> Sort - Output: ft1.c1, ft1.c2, ft1.c3, ft1.c4, ft1.c5, ft1.c6, ft1.c7, ft1.c8, ft1.*, ft2.*, ft2.c2 - Sort Key: ft1.c3 - -> Merge Join - Output: ft1.c1, ft1.c2, ft1.c3, ft1.c4, ft1.c5, ft1.c6, ft1.c7, ft1.c8, ft1.*, ft2.*, ft2.c2 - Merge Cond: (ft1.c1 = ft2.c1) - Join Filter: ((ft1.c1 - postgres_fdw_abs(ft2.c2)) = 0) - -> Sort - Output: ft1.c1, ft1.c2, ft1.c3, ft1.c4, ft1.c5, ft1.c6, ft1.c7, ft1.c8, ft1.* - Sort Key: ft1.c1 - -> Foreign Scan on public.ft1 - Output: ft1.c1, ft1.c2, ft1.c3, ft1.c4, ft1.c5, ft1.c6, ft1.c7, ft1.c8, ft1.* - Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE (("C 1" < 100)) - -> Materialize - Output: ft2.*, ft2.c1, ft2.c2 - -> Foreign Scan on public.ft2 - Output: ft2.*, ft2.c1, ft2.c2 - Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" ORDER BY "C 1" ASC NULLS LAST -(32 rows) - +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +ERROR: could not find junk ctid2 column ALTER SERVER loopback OPTIONS (DROP fdw_startup_cost); ALTER SERVER loopback OPTIONS (ADD extensions 'postgres_fdw'); DROP TABLE local_tbl; @@ -2614,6 +2622,7 @@ ALTER VIEW v5 OWNER TO regress_view_owner; EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN v5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10; -- can't be pushed down, different view owners +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ---------------------------------------------------------------------- Limit @@ -2635,6 +2644,7 @@ (16 rows) SELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN v5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 ----+---- 22 | @@ -2652,6 +2662,7 @@ ALTER VIEW v4 OWNER TO regress_view_owner; EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN v5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10; -- can be pushed down +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -2661,6 +2672,7 @@ (4 rows) SELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN v5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 ----+---- 22 | @@ -2677,6 +2689,7 @@ EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10; -- can't be pushed down, view owner not current user +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ---------------------------------------------------------------------- Limit @@ -2698,6 +2711,7 @@ (16 rows) SELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 ----+---- 22 | @@ -2715,6 +2729,7 @@ ALTER VIEW v4 OWNER TO CURRENT_USER; EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10; -- can be pushed down +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -2724,6 +2739,7 @@ (4 rows) SELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 ----+---- 22 | @@ -2754,6 +2770,7 @@ ERROR: user mapping not found for user "regress_view_owner_another", server "loopback" -- Likewise, but with the query under an UNION ALL EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM (SELECT * FROM v4 UNION ALL SELECT * FROM v4); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ERROR: user mapping not found for user "regress_view_owner_another", server "loopback" -- Should not get that error once a user mapping is created CREATE USER MAPPING FOR regress_view_owner_another SERVER loopback OPTIONS (password_required 'false'); @@ -2766,6 +2783,7 @@ (3 rows) EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM (SELECT * FROM v4 UNION ALL SELECT * FROM v4); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN -------------------------------------------------------- Append @@ -2790,6 +2808,7 @@ -- Simple aggregates explain (verbose, costs off) select count(c6), sum(c1), avg(c1), min(c2), max(c1), stddev(c2), sum(c1) * (random() <= 1)::int as sum2 from ft1 where c2 < 5 group by c2 order by 1, 2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -2799,6 +2818,7 @@ (4 rows) select count(c6), sum(c1), avg(c1), min(c2), max(c1), stddev(c2), sum(c1) * (random() <= 1)::int as sum2 from ft1 where c2 < 5 group by c2 order by 1, 2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree count | sum | avg | min | max | stddev | sum2 -------+-------+----------------------+-----+------+--------+------- 100 | 49600 | 496.0000000000000000 | 1 | 991 | 0 | 49600 @@ -2810,6 +2830,7 @@ explain (verbose, costs off) select count(c6), sum(c1), avg(c1), min(c2), max(c1), stddev(c2), sum(c1) * (random() <= 1)::int as sum2 from ft1 where c2 < 5 group by c2 order by 1, 2 limit 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -2819,6 +2840,7 @@ (4 rows) select count(c6), sum(c1), avg(c1), min(c2), max(c1), stddev(c2), sum(c1) * (random() <= 1)::int as sum2 from ft1 where c2 < 5 group by c2 order by 1, 2 limit 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree count | sum | avg | min | max | stddev | sum2 -------+-------+----------------------+-----+-----+--------+------- 100 | 49600 | 496.0000000000000000 | 1 | 991 | 0 | 49600 @@ -2827,6 +2849,7 @@ -- Aggregate is not pushed down as aggregation contains random() explain (verbose, costs off) select sum(c1 * (random() <= 1)::int) as sum, avg(c1) from ft1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------- Aggregate @@ -2839,6 +2862,7 @@ -- Aggregate over join query explain (verbose, costs off) select count(*), sum(t1.c1), avg(t2.c1) from ft1 t1 inner join ft1 t2 on (t1.c2 = t2.c2) where t1.c2 = 6; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -2848,6 +2872,7 @@ (4 rows) select count(*), sum(t1.c1), avg(t2.c1) from ft1 t1 inner join ft1 t2 on (t1.c2 = t2.c2) where t1.c2 = 6; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree count | sum | avg -------+---------+---------------------- 10000 | 5010000 | 501.0000000000000000 @@ -2856,6 +2881,7 @@ -- Not pushed down due to local conditions present in underneath input rel explain (verbose, costs off) select sum(t1.c1), count(t2.c1) from ft1 t1 inner join ft2 t2 on (t1.c1 = t2.c1) where ((t1.c1 * t2.c1)/(t1.c1 * t2.c1)) * random() <= 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------- Aggregate @@ -2870,6 +2896,7 @@ -- GROUP BY clause having expressions explain (verbose, costs off) select c2/2, sum(c2) * (c2/2) from ft1 group by c2/2 order by c2/2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------------ Foreign Scan @@ -2879,6 +2906,7 @@ (4 rows) select c2/2, sum(c2) * (c2/2) from ft1 group by c2/2 order by c2/2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ?column? | ?column? ----------+---------- 0 | 0 @@ -2892,6 +2920,7 @@ set enable_incremental_sort = off; explain (verbose, costs off) select count(x.a), sum(x.a) from (select c2 a, sum(c1) b from ft1 group by c2, sqrt(c1) order by 1, 2) x; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------------- Aggregate @@ -2903,6 +2932,7 @@ (6 rows) select count(x.a), sum(x.a) from (select c2 a, sum(c1) b from ft1 group by c2, sqrt(c1) order by 1, 2) x; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree count | sum -------+------ 1000 | 4500 @@ -2912,6 +2942,7 @@ -- Aggregate is still pushed down by taking unshippable expression out explain (verbose, costs off) select c2 * (random() <= 1)::int as sum1, sum(c1) * c2 as sum2 from ft1 group by c2 order by 1, 2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN --------------------------------------------------------------------------------------------------- Sort @@ -2924,6 +2955,7 @@ (7 rows) select c2 * (random() <= 1)::int as sum1, sum(c1) * c2 as sum2 from ft1 group by c2 order by 1, 2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree sum1 | sum2 ------+-------- 0 | 0 @@ -2941,6 +2973,7 @@ -- Aggregate with unshippable GROUP BY clause are not pushed explain (verbose, costs off) select c2 * (random() <= 1)::int as c2 from ft2 group by c2 * (random() <= 1)::int order by 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------ Sort @@ -2957,6 +2990,7 @@ -- GROUP BY clause in various forms, cardinal, alias and constant expression explain (verbose, costs off) select count(c2) w, c2 x, 5 y, 7.0 z from ft1 group by 2, y, 9.0::int order by 2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------ Foreign Scan @@ -2966,6 +3000,7 @@ (4 rows) select count(c2) w, c2 x, 5 y, 7.0 z from ft1 group by 2, y, 9.0::int order by 2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree w | x | y | z -----+---+---+----- 100 | 0 | 5 | 7.0 @@ -2984,6 +3019,7 @@ -- Also, ORDER BY contains an aggregate function explain (verbose, costs off) select c2, c2 from ft1 where c2 > 6 group by 1, 2 order by sum(c1); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -2993,6 +3029,7 @@ (4 rows) select c2, c2 from ft1 where c2 > 6 group by 1, 2 order by sum(c1); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c2 | c2 ----+---- 7 | 7 @@ -3003,6 +3040,7 @@ -- Testing HAVING clause shippability explain (verbose, costs off) select c2, sum(c1) from ft2 group by c2 having avg(c1) < 500 and sum(c1) < 49800 order by c2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------ Foreign Scan @@ -3012,6 +3050,7 @@ (4 rows) select c2, sum(c1) from ft2 group by c2 having avg(c1) < 500 and sum(c1) < 49800 order by c2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c2 | sum ----+------- 1 | 49600 @@ -3021,6 +3060,7 @@ -- Unshippable HAVING clause will be evaluated locally, and other qual in HAVING clause is pushed down explain (verbose, costs off) select count(*) from (select c5, count(c1) from ft1 group by c5, sqrt(c2) having (avg(c1) / avg(c1)) * random() <= 1 and avg(c1) < 500) x; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------- Aggregate @@ -3033,6 +3073,7 @@ (7 rows) select count(*) from (select c5, count(c1) from ft1 group by c5, sqrt(c2) having (avg(c1) / avg(c1)) * random() <= 1 and avg(c1) < 500) x; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree count ------- 49 @@ -3041,6 +3082,7 @@ -- Aggregate in HAVING clause is not pushable, and thus aggregation is not pushed down explain (verbose, costs off) select sum(c1) from ft1 group by c2 having avg(c1 * (random() <= 1)::int) > 100 order by 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN --------------------------------------------------------------------------------------------------- Sort @@ -3059,6 +3101,7 @@ -- of an initplan) can be trouble, per bug #15781 explain (verbose, costs off) select exists(select 1 from pg_enum), sum(c1) from ft1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN -------------------------------------------------- Foreign Scan @@ -3070,6 +3113,7 @@ (6 rows) select exists(select 1 from pg_enum), sum(c1) from ft1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree exists | sum --------+-------- t | 500500 @@ -3077,6 +3121,7 @@ explain (verbose, costs off) select exists(select 1 from pg_enum), sum(c1) from ft1 group by 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN --------------------------------------------------- GroupAggregate @@ -3089,6 +3134,7 @@ (7 rows) select exists(select 1 from pg_enum), sum(c1) from ft1 group by 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree exists | sum --------+-------- t | 500500 @@ -3098,6 +3144,7 @@ -- ORDER BY within aggregate, same column used to order explain (verbose, costs off) select array_agg(c1 order by c1) from ft1 where c1 < 100 group by c2 order by 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -3107,6 +3154,7 @@ (4 rows) select array_agg(c1 order by c1) from ft1 where c1 < 100 group by c2 order by 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree array_agg -------------------------------- {1,11,21,31,41,51,61,71,81,91} @@ -3124,6 +3172,7 @@ -- ORDER BY within aggregate, different column used to order also using DESC explain (verbose, costs off) select array_agg(c5 order by c1 desc) from ft2 where c2 = 6 and c1 < 50; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -3133,6 +3182,7 @@ (4 rows) select array_agg(c5 order by c1 desc) from ft2 where c2 = 6 and c1 < 50; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree array_agg ------------------------------------------------------------------------------------------------------------------------------------------ {"Mon Feb 16 00:00:00 1970","Fri Feb 06 00:00:00 1970","Tue Jan 27 00:00:00 1970","Sat Jan 17 00:00:00 1970","Wed Jan 07 00:00:00 1970"} @@ -3141,6 +3191,7 @@ -- DISTINCT within aggregate explain (verbose, costs off) select array_agg(distinct (t1.c1)%5) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) where t1.c1 < 20 or (t1.c1 is null and t2.c1 < 5) group by (t2.c1)%3 order by 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Foreign Scan @@ -3150,6 +3201,7 @@ (4 rows) select array_agg(distinct (t1.c1)%5) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) where t1.c1 < 20 or (t1.c1 is null and t2.c1 < 5) group by (t2.c1)%3 order by 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree array_agg -------------- {0,1,2,3,4} @@ -3159,6 +3211,7 @@ -- DISTINCT combined with ORDER BY within aggregate explain (verbose, costs off) select array_agg(distinct (t1.c1)%5 order by (t1.c1)%5) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) where t1.c1 < 20 or (t1.c1 is null and t2.c1 < 5) group by (t2.c1)%3 order by 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -3168,6 +3221,7 @@ (4 rows) select array_agg(distinct (t1.c1)%5 order by (t1.c1)%5) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) where t1.c1 < 20 or (t1.c1 is null and t2.c1 < 5) group by (t2.c1)%3 order by 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree array_agg -------------- {0,1,2,3,4} @@ -3176,6 +3230,7 @@ explain (verbose, costs off) select array_agg(distinct (t1.c1)%5 order by (t1.c1)%5 desc nulls last) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) where t1.c1 < 20 or (t1.c1 is null and t2.c1 < 5) group by (t2.c1)%3 order by 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Foreign Scan @@ -3185,6 +3240,7 @@ (4 rows) select array_agg(distinct (t1.c1)%5 order by (t1.c1)%5 desc nulls last) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) where t1.c1 < 20 or (t1.c1 is null and t2.c1 < 5) group by (t2.c1)%3 order by 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree array_agg -------------- {3,2,1,NULL} @@ -3194,6 +3250,7 @@ -- FILTER within aggregate explain (verbose, costs off) select sum(c1) filter (where c1 < 100 and c2 > 5) from ft1 group by c2 order by 1 nulls last; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -3203,6 +3260,7 @@ (4 rows) select sum(c1) filter (where c1 < 100 and c2 > 5) from ft1 group by c2 order by 1 nulls last; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree sum ----- 510 @@ -3220,6 +3278,7 @@ -- DISTINCT, ORDER BY and FILTER within aggregate explain (verbose, costs off) select sum(c1%3), sum(distinct c1%3 order by c1%3) filter (where c1%3 < 2), c2 from ft1 where c2 = 6 group by c2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Foreign Scan @@ -3229,6 +3288,7 @@ (4 rows) select sum(c1%3), sum(distinct c1%3 order by c1%3) filter (where c1%3 < 2), c2 from ft1 where c2 = 6 group by c2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree sum | sum | c2 -----+-----+---- 99 | 1 | 6 @@ -3237,6 +3297,7 @@ -- Outer query is aggregation query explain (verbose, costs off) select distinct (select count(*) filter (where t2.c2 = 6 and t2.c1 < 10) from ft1 t1 where t1.c1 = 6) from ft2 t2 where t2.c2 % 6 = 0 order by 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------ Unique @@ -3255,6 +3316,7 @@ (13 rows) select distinct (select count(*) filter (where t2.c2 = 6 and t2.c1 < 10) from ft1 t1 where t1.c1 = 6) from ft2 t2 where t2.c2 % 6 = 0 order by 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree count ------- 1 @@ -3263,6 +3325,7 @@ -- Inner query is aggregation query explain (verbose, costs off) select distinct (select count(t1.c1) filter (where t2.c2 = 6 and t2.c1 < 10) from ft1 t1 where t1.c1 = 6) from ft2 t2 where t2.c2 % 6 = 0 order by 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------ Unique @@ -3281,6 +3344,7 @@ (13 rows) select distinct (select count(t1.c1) filter (where t2.c2 = 6 and t2.c1 < 10) from ft1 t1 where t1.c1 = 6) from ft2 t2 where t2.c2 % 6 = 0 order by 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree count ------- 0 @@ -3290,6 +3354,7 @@ -- Aggregate not pushed down as FILTER condition is not pushable explain (verbose, costs off) select sum(c1) filter (where (c1 / c1) * random() <= 1) from ft1 group by c2 order by 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------------------ Sort @@ -3305,6 +3370,7 @@ explain (verbose, costs off) select sum(c2) filter (where c2 in (select c2 from ft1 where c2 < 5)) from ft1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------- Aggregate @@ -3321,6 +3387,7 @@ -- Ordered-sets within aggregate explain (verbose, costs off) select c2, rank('10'::varchar) within group (order by c6), percentile_cont(c2/10::numeric) within group (order by c1) from ft1 where c2 < 10 group by c2 having percentile_cont(c2/10::numeric) within group (order by c1) < 500 order by c2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Sort @@ -3333,6 +3400,7 @@ (7 rows) select c2, rank('10'::varchar) within group (order by c6), percentile_cont(c2/10::numeric) within group (order by c1) from ft1 where c2 < 10 group by c2 having percentile_cont(c2/10::numeric) within group (order by c1) < 500 order by c2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c2 | rank | percentile_cont ----+------+----------------- 0 | 101 | 10 @@ -3345,6 +3413,7 @@ -- Using multiple arguments within aggregates explain (verbose, costs off) select c1, rank(c1, c2) within group (order by c1, c2) from ft1 group by c1, c2 having c1 = 6 order by 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -3354,6 +3423,7 @@ (4 rows) select c1, rank(c1, c2) within group (order by c1, c2) from ft1 group by c1, c2 having c1 = 6 order by 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | rank ----+------ 6 | 1 @@ -3371,6 +3441,7 @@ -- Not pushed down due to user defined aggregate explain (verbose, costs off) select c2, least_agg(c1) from ft1 group by c2 order by c2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ---------------------------------------------------------------------------------- GroupAggregate @@ -3388,6 +3459,7 @@ -- Now aggregate will be pushed. Aggregate will display VARIADIC argument. explain (verbose, costs off) select c2, least_agg(c1) from ft1 where c2 < 100 group by c2 order by c2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ----------------------------------------------------------------------------------------------------------------------- Sort @@ -3400,6 +3472,7 @@ (7 rows) select c2, least_agg(c1) from ft1 where c2 < 100 group by c2 order by c2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c2 | least_agg ----+----------- 0 | 10 @@ -3421,6 +3494,7 @@ -- Not pushed down as we have dropped objects from extension. explain (verbose, costs off) select c2, least_agg(c1) from ft1 group by c2 order by c2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ---------------------------------------------------------------------------------- GroupAggregate @@ -3467,6 +3541,7 @@ -- extension yet. explain (verbose, costs off) select array_agg(c1 order by c1 using operator(public.<^)) from ft2 where c2 = 6 and c1 < 100 group by c2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN -------------------------------------------------------------------------------------------------- GroupAggregate @@ -3482,6 +3557,7 @@ -- This should not be pushed either. explain (verbose, costs off) select * from ft2 order by c1 using operator(public.<^); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------- Sort @@ -3506,6 +3582,7 @@ alter server loopback options (add fdw_tuple_cost '0.5'); explain (verbose, costs off) select array_agg(c1 order by c1 using operator(public.<^)) from ft2 where c2 = 6 and c1 < 100 group by c2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -3515,6 +3592,7 @@ (4 rows) select array_agg(c1 order by c1 using operator(public.<^)) from ft2 where c2 = 6 and c1 < 100 group by c2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree array_agg -------------------------------- {6,16,26,36,46,56,66,76,86,96} @@ -3524,6 +3602,7 @@ -- This should be pushed too. explain (verbose, costs off) select * from ft2 order by c1 using operator(public.<^); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------- Foreign Scan on public.ft2 @@ -3542,6 +3621,7 @@ -- This will not be pushed as sort operator is now removed from the extension. explain (verbose, costs off) select array_agg(c1 order by c1 using operator(public.<^)) from ft2 where c2 = 6 and c1 < 100 group by c2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN -------------------------------------------------------------------------------------------------- GroupAggregate @@ -3565,6 +3645,7 @@ -- the aggregate cannot be pushed down to foreign server. explain (verbose, costs off) select count(t1.c3) from ft2 t1 left join ft2 t2 on (t1.c1 = random() * t2.c2); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------- Aggregate @@ -3585,6 +3666,7 @@ -- Subquery in FROM clause having aggregate explain (verbose, costs off) select count(*), x.b from ft1, (select c2 a, sum(c1) b from ft1 group by c2) x where ft1.c2 = x.a group by x.b order by 1, 2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ----------------------------------------------------------------------------------------------- Sort @@ -3611,6 +3693,7 @@ (21 rows) select count(*), x.b from ft1, (select c2 a, sum(c1) b from ft1 group by c2) x where ft1.c2 = x.a group by x.b order by 1, 2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree count | b -------+------- 100 | 49600 @@ -3628,6 +3711,7 @@ -- FULL join with IS NULL check in HAVING explain (verbose, costs off) select avg(t1.c1), sum(t2.c1) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) group by t2.c1 having (avg(t1.c1) is null and sum(t2.c1) < 10) or sum(t2.c1) is null order by 1 nulls last, 2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -3637,6 +3721,7 @@ (4 rows) select avg(t1.c1), sum(t2.c1) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) group by t2.c1 having (avg(t1.c1) is null and sum(t2.c1) < 10) or sum(t2.c1) is null order by 1 nulls last, 2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree avg | sum ---------------------+----- 51.0000000000000000 | @@ -3648,6 +3733,7 @@ -- subqueries. explain (verbose, costs off) select count(*), sum(t1.c1), avg(t2.c1) from (select c1 from ft4 where c1 between 50 and 60) t1 full join (select c1 from ft5 where c1 between 50 and 60) t2 on (t1.c1 = t2.c1); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -3657,6 +3743,7 @@ (4 rows) select count(*), sum(t1.c1), avg(t2.c1) from (select c1 from ft4 where c1 between 50 and 60) t1 full join (select c1 from ft5 where c1 between 50 and 60) t2 on (t1.c1 = t2.c1); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree count | sum | avg -------+-----+--------------------- 8 | 330 | 55.5000000000000000 @@ -3666,6 +3753,7 @@ -- foreign server. explain (verbose, costs off) select sum(c2) * (random() <= 1)::int as sum from ft1 order by 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN -------------------------------------------------------------------------------- Sort @@ -3678,6 +3766,7 @@ (7 rows) select sum(c2) * (random() <= 1)::int as sum from ft1 order by 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree sum ------ 4500 @@ -3687,6 +3776,7 @@ set enable_hashagg to false; explain (verbose, costs off) select c2, sum from "S 1"."T 1" t1, lateral (select sum(t2.c1 + t1."C 1") sum from ft2 t2 group by t2.c1) qry where t1.c2 * 2 = qry.sum and t1.c2 < 3 and t1."C 1" < 100 order by 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------ Sort @@ -3708,6 +3798,7 @@ (16 rows) select c2, sum from "S 1"."T 1" t1, lateral (select sum(t2.c1 + t1."C 1") sum from ft2 t2 group by t2.c1) qry where t1.c2 * 2 = qry.sum and t1.c2 < 3 and t1."C 1" < 100 order by 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c2 | sum ----+----- 1 | 2 @@ -3728,6 +3819,7 @@ ) AS subq_1 WHERE ref_0."C 1" < 10 AND subq_1.c3 = '00001' ORDER BY ref_0."C 1"; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN --------------------------------------------------------------------------------------------------------- Nested Loop @@ -3758,6 +3850,7 @@ ) AS subq_1 WHERE ref_0."C 1" < 10 AND subq_1.c3 = '00001' ORDER BY ref_0."C 1"; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c2 | c1 | c2 | c3 ----+----+----+------- 1 | 1 | 1 | 00001 @@ -3774,6 +3867,7 @@ -- Check with placeHolderVars explain (verbose, costs off) select sum(q.a), count(q.b) from ft4 left join (select 13, avg(ft1.c1), sum(ft2.c1) from ft1 right join ft2 on (ft1.c1 = ft2.c1)) q(a, b, c) on (ft4.c1 <= q.b); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------- Aggregate @@ -3796,6 +3890,7 @@ (17 rows) select sum(q.a), count(q.b) from ft4 left join (select 13, avg(ft1.c1), sum(ft2.c1) from ft1 right join ft2 on (ft1.c1 = ft2.c1)) q(a, b, c) on (ft4.c1 <= q.b); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree sum | count -----+------- 650 | 50 @@ -3805,6 +3900,7 @@ -- Grouping sets explain (verbose, costs off) select c2, sum(c1) from ft1 where c2 < 3 group by rollup(c2) order by 1 nulls last; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------ Sort @@ -3820,6 +3916,7 @@ (10 rows) select c2, sum(c1) from ft1 where c2 < 3 group by rollup(c2) order by 1 nulls last; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c2 | sum ----+-------- 0 | 50500 @@ -3830,6 +3927,7 @@ explain (verbose, costs off) select c2, sum(c1) from ft1 where c2 < 3 group by cube(c2) order by 1 nulls last; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------ Sort @@ -3845,6 +3943,7 @@ (10 rows) select c2, sum(c1) from ft1 where c2 < 3 group by cube(c2) order by 1 nulls last; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c2 | sum ----+-------- 0 | 50500 @@ -3855,6 +3954,7 @@ explain (verbose, costs off) select c2, c6, sum(c1) from ft1 where c2 < 3 group by grouping sets(c2, c6) order by 1 nulls last, 2 nulls last; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ---------------------------------------------------------------------------------- Sort @@ -3870,6 +3970,7 @@ (10 rows) select c2, c6, sum(c1) from ft1 where c2 < 3 group by grouping sets(c2, c6) order by 1 nulls last, 2 nulls last; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c2 | c6 | sum ----+----+------- 0 | | 50500 @@ -3882,6 +3983,7 @@ explain (verbose, costs off) select c2, sum(c1), grouping(c2) from ft1 where c2 < 3 group by c2 order by 1 nulls last; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------ Sort @@ -3896,6 +3998,7 @@ (9 rows) select c2, sum(c1), grouping(c2) from ft1 where c2 < 3 group by c2 order by 1 nulls last; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c2 | sum | grouping ----+-------+---------- 0 | 50500 | 0 @@ -3906,6 +4009,7 @@ -- DISTINCT itself is not pushed down, whereas underneath aggregate is pushed explain (verbose, costs off) select distinct sum(c1)/1000 s from ft2 where c2 < 6 group by c2 order by 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------- Unique @@ -3920,6 +4024,7 @@ (9 rows) select distinct sum(c1)/1000 s from ft2 where c2 < 6 group by c2 order by 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree s ---- 49 @@ -3929,6 +4034,7 @@ -- WindowAgg explain (verbose, costs off) select c2, sum(c2), count(c2) over (partition by c2%2) from ft2 where c2 < 10 group by c2 order by 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------ Sort @@ -3946,6 +4052,7 @@ (12 rows) select c2, sum(c2), count(c2) over (partition by c2%2) from ft2 where c2 < 10 group by c2 order by 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c2 | sum | count ----+-----+------- 0 | 0 | 5 @@ -3962,6 +4069,7 @@ explain (verbose, costs off) select c2, array_agg(c2) over (partition by c2%2 order by c2 desc) from ft1 where c2 < 10 group by c2 order by 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN --------------------------------------------------------------------------------------------------- Sort @@ -3979,6 +4087,7 @@ (12 rows) select c2, array_agg(c2) over (partition by c2%2 order by c2 desc) from ft1 where c2 < 10 group by c2 order by 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c2 | array_agg ----+------------- 0 | {8,6,4,2,0} @@ -3995,6 +4104,7 @@ explain (verbose, costs off) select c2, array_agg(c2) over (partition by c2%2 order by c2 range between current row and unbounded following) from ft1 where c2 < 10 group by c2 order by 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN --------------------------------------------------------------------------------------------------- Sort @@ -4012,6 +4122,7 @@ (12 rows) select c2, array_agg(c2) over (partition by c2%2 order by c2 range between current row and unbounded following) from ft1 where c2 < 10 group by c2 order by 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c2 | array_agg ----+------------- 0 | {0,2,4,6,8} @@ -4031,6 +4142,7 @@ -- =================================================================== -- simple join PREPARE st1(int, int) AS SELECT t1.c3, t2.c3 FROM ft1 t1, ft2 t2 WHERE t1.c1 = $1 AND t2.c1 = $2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree EXPLAIN (VERBOSE, COSTS OFF) EXECUTE st1(1, 2); QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------ @@ -4056,6 +4168,7 @@ SET enable_sort TO off; -- subquery using stable function (can't be sent to remote) PREPARE st2(int) AS SELECT * FROM ft1 t1 WHERE t1.c1 < $2 AND t1.c3 IN (SELECT c3 FROM ft2 t2 WHERE c1 > $1 AND date(c4) = '1970-01-17'::date) ORDER BY c1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree EXPLAIN (VERBOSE, COSTS OFF) EXECUTE st2(10, 20); QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------- @@ -4089,6 +4202,7 @@ RESET enable_sort; -- subquery using immutable function (can be sent to remote) PREPARE st3(int) AS SELECT * FROM ft1 t1 WHERE t1.c1 < $2 AND t1.c3 IN (SELECT c3 FROM ft2 t2 WHERE c1 > $1 AND date(c5) = '1970-01-17'::date) ORDER BY c1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree EXPLAIN (VERBOSE, COSTS OFF) EXECUTE st3(10, 20); QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -4111,6 +4225,7 @@ -- custom plan should be chosen initially PREPARE st4(int) AS SELECT * FROM ft1 t1 WHERE t1.c1 = $1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree EXPLAIN (VERBOSE, COSTS OFF) EXECUTE st4(1); QUERY PLAN --------------------------------------------------------------------------------------------- @@ -4162,6 +4277,7 @@ -- value of $1 should not be sent to remote PREPARE st5(user_enum,int) AS SELECT * FROM ft1 t1 WHERE c8 = $1 and c1 = $2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree EXPLAIN (VERBOSE, COSTS OFF) EXECUTE st5('foo', 1); QUERY PLAN --------------------------------------------------------------------------------------------- @@ -4224,6 +4340,7 @@ -- altering FDW options requires replanning PREPARE st6 AS SELECT * FROM ft1 t1 WHERE t1.c1 = t1.c2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree EXPLAIN (VERBOSE, COSTS OFF) EXECUTE st6; QUERY PLAN ---------------------------------------------------------------------------------------------- @@ -4233,6 +4350,7 @@ (3 rows) PREPARE st7 AS INSERT INTO ft1 (c1,c2,c3) VALUES (1001,101,'foo'); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree EXPLAIN (VERBOSE, COSTS OFF) EXECUTE st7; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -4246,6 +4364,7 @@ ALTER TABLE "S 1"."T 1" RENAME TO "T 0"; ALTER FOREIGN TABLE ft1 OPTIONS (SET table_name 'T 0'); EXPLAIN (VERBOSE, COSTS OFF) EXECUTE st6; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ---------------------------------------------------------------------------------------------- Foreign Scan on public.ft1 t1 @@ -4268,6 +4387,7 @@ (9 rows) EXPLAIN (VERBOSE, COSTS OFF) EXECUTE st7; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Insert on public.ft1 @@ -4280,6 +4400,7 @@ ALTER TABLE "S 1"."T 0" RENAME TO "T 1"; ALTER FOREIGN TABLE ft1 OPTIONS (SET table_name 'T 1'); PREPARE st8 AS SELECT count(c3) FROM ft1 t1 WHERE t1.c1 === t1.c2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree EXPLAIN (VERBOSE, COSTS OFF) EXECUTE st8; QUERY PLAN ----------------------------------------------------------------------------------------- @@ -4291,6 +4412,7 @@ ALTER SERVER loopback OPTIONS (DROP extensions); EXPLAIN (VERBOSE, COSTS OFF) EXECUTE st8; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ----------------------------------------------------------- Aggregate @@ -4320,6 +4442,7 @@ -- System columns, except ctid and oid, should not be sent to remote EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE t1.tableoid = 'pg_class'::regclass LIMIT 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------- Limit @@ -4331,6 +4454,7 @@ (6 rows) SELECT * FROM ft1 t1 WHERE t1.tableoid = 'ft1'::regclass LIMIT 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 ----+----+-------+------------------------------+--------------------------+----+------------+----- 1 | 1 | 00001 | Fri Jan 02 00:00:00 1970 PST | Fri Jan 02 00:00:00 1970 | 1 | 1 | foo @@ -4338,6 +4462,7 @@ EXPLAIN (VERBOSE, COSTS OFF) SELECT tableoid::regclass, * FROM ft1 t1 LIMIT 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ----------------------------------------------------------------------------------------- Foreign Scan on public.ft1 t1 @@ -4346,6 +4471,7 @@ (3 rows) SELECT tableoid::regclass, * FROM ft1 t1 LIMIT 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree tableoid | c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 ----------+----+----+-------+------------------------------+--------------------------+----+------------+----- ft1 | 1 | 1 | 00001 | Fri Jan 02 00:00:00 1970 PST | Fri Jan 02 00:00:00 1970 | 1 | 1 | foo @@ -4353,6 +4479,7 @@ EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE t1.ctid = '(0,2)'; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN -------------------------------------------------------------------------------------------------- Foreign Scan on public.ft1 t1 @@ -4361,6 +4488,7 @@ (3 rows) SELECT * FROM ft1 t1 WHERE t1.ctid = '(0,2)'; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 ----+----+-------+------------------------------+--------------------------+----+------------+----- 2 | 2 | 00002 | Sat Jan 03 00:00:00 1970 PST | Sat Jan 03 00:00:00 1970 | 2 | 2 | foo @@ -4368,6 +4496,7 @@ EXPLAIN (VERBOSE, COSTS OFF) SELECT ctid, * FROM ft1 t1 LIMIT 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ----------------------------------------------------------------------------------------------- Foreign Scan on public.ft1 t1 @@ -4376,6 +4505,7 @@ (3 rows) SELECT ctid, * FROM ft1 t1 LIMIT 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ctid | c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 -------+----+----+-------+------------------------------+--------------------------+----+------------+----- (0,1) | 1 | 1 | 00001 | Fri Jan 02 00:00:00 1970 PST | Fri Jan 02 00:00:00 1970 | 1 | 1 | foo @@ -4394,6 +4524,8 @@ END; $$ LANGUAGE plpgsql; SELECT f_test(100); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree f_test -------- 100 @@ -4426,17 +4558,21 @@ -- =================================================================== ALTER FOREIGN TABLE ft1 ALTER COLUMN c8 TYPE int; SELECT * FROM ft1 ftx(x1,x2,x3,x4,x5,x6,x7,x8) WHERE x1 = 1; -- ERROR +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ERROR: invalid input syntax for type integer: "foo" CONTEXT: column "x8" of foreign table "ftx" SELECT ftx.x1, ft2.c2, ftx.x8 FROM ft1 ftx(x1,x2,x3,x4,x5,x6,x7,x8), ft2 WHERE ftx.x1 = ft2.c1 AND ftx.x1 = 1; -- ERROR +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ERROR: invalid input syntax for type integer: "foo" CONTEXT: column "x8" of foreign table "ftx" SELECT ftx.x1, ft2.c2, ftx FROM ft1 ftx(x1,x2,x3,x4,x5,x6,x7,x8), ft2 WHERE ftx.x1 = ft2.c1 AND ftx.x1 = 1; -- ERROR +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ERROR: invalid input syntax for type integer: "foo" CONTEXT: whole-row reference to foreign table "ftx" SELECT sum(c2), array_agg(c8) FROM ft1 GROUP BY c8; -- ERROR +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ERROR: invalid input syntax for type integer: "foo" CONTEXT: processing expression at position 2 in select list ANALYZE ft1; -- ERROR @@ -4450,6 +4586,7 @@ ALTER FOREIGN TABLE ft1 ALTER COLUMN c8 TYPE text; EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 WHERE c8 = 'foo' LIMIT 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN -------------------------------------------------------------------------------------------------------------- Foreign Scan on public.ft1 @@ -4458,6 +4595,7 @@ (3 rows) SELECT * FROM ft1 WHERE c8 = 'foo' LIMIT 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 ----+----+-------+------------------------------+--------------------------+----+------------+----- 1 | 1 | 00001 | Fri Jan 02 00:00:00 1970 PST | Fri Jan 02 00:00:00 1970 | 1 | 1 | foo @@ -4465,6 +4603,7 @@ EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 WHERE 'foo' = c8 LIMIT 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN -------------------------------------------------------------------------------------------------------------- Foreign Scan on public.ft1 @@ -4473,6 +4612,7 @@ (3 rows) SELECT * FROM ft1 WHERE 'foo' = c8 LIMIT 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 ----+----+-------+------------------------------+--------------------------+----+------------+----- 1 | 1 | 00001 | Fri Jan 02 00:00:00 1970 PST | Fri Jan 02 00:00:00 1970 | 1 | 1 | foo @@ -4482,10 +4622,12 @@ -- the remote which will balk if we try to do anything incompatible -- with that remote type SELECT * FROM ft1 WHERE c8 LIKE 'foo' LIMIT 1; -- ERROR +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ERROR: operator does not exist: public.user_enum ~~ unknown HINT: No operator matches the given name and argument types. You might need to add explicit type casts. CONTEXT: remote SQL command: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE ((c8 ~~ 'foo')) LIMIT 1::bigint SELECT * FROM ft1 WHERE c8::text LIKE 'foo' LIMIT 1; -- ERROR; cast not pushed down +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ERROR: operator does not exist: public.user_enum ~~ unknown HINT: No operator matches the given name and argument types. You might need to add explicit type casts. CONTEXT: remote SQL command: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE ((c8 ~~ 'foo')) LIMIT 1::bigint @@ -4496,6 +4638,7 @@ -- =================================================================== BEGIN; DECLARE c CURSOR FOR SELECT * FROM ft1 ORDER BY c1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree FETCH c; c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 ----+----+-------+------------------------------+--------------------------+----+------------+----- @@ -4516,6 +4659,7 @@ SAVEPOINT s; SELECT * FROM ft1 WHERE 1 / (c1 - 1) > 0; -- ERROR +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ERROR: division by zero CONTEXT: remote SQL command: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE (((1 / ("C 1" - 1)) > 0)) ROLLBACK TO s; @@ -4526,6 +4670,7 @@ (1 row) SELECT * FROM ft1 ORDER BY c1 LIMIT 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 ----+----+-------+------------------------------+--------------------------+----+------------+----- 1 | 1 | 00001 | Fri Jan 02 00:00:00 1970 PST | Fri Jan 02 00:00:00 1970 | 1 | 1 | foo @@ -4540,6 +4685,7 @@ server loopback options (table_name 'loct3', use_remote_estimate 'true'); -- can be sent to remote explain (verbose, costs off) select * from ft3 where f1 = 'foo'; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------ Foreign Scan on public.ft3 @@ -4548,6 +4694,7 @@ (3 rows) explain (verbose, costs off) select * from ft3 where f1 COLLATE "C" = 'foo'; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------ Foreign Scan on public.ft3 @@ -4556,6 +4703,7 @@ (3 rows) explain (verbose, costs off) select * from ft3 where f2 = 'foo'; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------ Foreign Scan on public.ft3 @@ -4564,6 +4712,7 @@ (3 rows) explain (verbose, costs off) select * from ft3 where f3 = 'foo'; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------ Foreign Scan on public.ft3 @@ -4573,6 +4722,7 @@ explain (verbose, costs off) select * from ft3 f, loct3 l where f.f3 = l.f3 and l.f1 = 'foo'; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN -------------------------------------------------------------------------------------------------- Nested Loop @@ -4587,6 +4737,7 @@ -- can't be sent to remote explain (verbose, costs off) select * from ft3 where f1 COLLATE "POSIX" = 'foo'; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN --------------------------------------------------- Foreign Scan on public.ft3 @@ -4596,6 +4747,7 @@ (4 rows) explain (verbose, costs off) select * from ft3 where f1 = 'foo' COLLATE "C"; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN --------------------------------------------------- Foreign Scan on public.ft3 @@ -4605,6 +4757,7 @@ (4 rows) explain (verbose, costs off) select * from ft3 where f2 COLLATE "C" = 'foo'; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN --------------------------------------------------- Foreign Scan on public.ft3 @@ -4614,6 +4767,7 @@ (4 rows) explain (verbose, costs off) select * from ft3 where f2 = 'foo' COLLATE "C"; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN --------------------------------------------------- Foreign Scan on public.ft3 @@ -4624,6 +4778,7 @@ explain (verbose, costs off) select * from ft3 f, loct3 l where f.f3 = l.f3 COLLATE "POSIX" and l.f1 = 'foo'; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------- Hash Join @@ -4648,6 +4803,7 @@ WHERE ft2.c1 > 900 AND EXISTS (SELECT 1 FROM ft5 WHERE ft4.c1 = ft5.c1) ORDER BY ft2.c1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -4660,6 +4816,7 @@ WHERE ft2.c1 > 900 AND EXISTS (SELECT 1 FROM ft5 WHERE ft4.c1 = ft5.c1) ORDER BY ft2.c1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 | c1 | c2 | c3 -----+----+-------+------------------------------+--------------------------+----+------------+-----+----+----+-------- 906 | 6 | 00906 | Wed Jan 07 00:00:00 1970 PST | Wed Jan 07 00:00:00 1970 | 6 | 6 | foo | 6 | 7 | AAA006 @@ -4682,6 +4839,7 @@ ON ft2.c2 = ft4.c1 WHERE ft2.c1 > 900 ORDER BY ft2.c1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -4696,6 +4854,7 @@ ON ft2.c2 = ft4.c1 WHERE ft2.c1 > 900 ORDER BY ft2.c1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 | c1 | c2 | c3 -----+----+-------+------------------------------+--------------------------+----+------------+-----+----+----+-------- 906 | 6 | 00906 | Wed Jan 07 00:00:00 1970 PST | Wed Jan 07 00:00:00 1970 | 6 | 6 | foo | 6 | 7 | AAA006 @@ -4718,6 +4877,7 @@ ON ft2.c2 = ft4.c1 WHERE ft2.c1 > 900 ORDER BY ft2.c1 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Foreign Scan @@ -4732,6 +4892,7 @@ ON ft2.c2 = ft4.c1 WHERE ft2.c1 > 900 ORDER BY ft2.c1 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 | c1 | c2 | c3 -----+----+-------+------------------------------+--------------------------+----+------------+-----+----+----+-------- 901 | 1 | 00901 | Fri Jan 02 00:00:00 1970 PST | Fri Jan 02 00:00:00 1970 | 1 | 1 | foo | | | @@ -4757,6 +4918,7 @@ ON ft2.c2 <= ft5.c1 WHERE ft2.c1 > 900 ORDER BY ft2.c1 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -4774,6 +4936,7 @@ ON ft2.c2 <= ft5.c1 WHERE ft2.c1 > 900 ORDER BY ft2.c1 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 | c1 | c2 | c3 -----+----+-------+------------------------------+--------------------------+----+------------+-----+----+----+-------- 906 | 6 | 00906 | Wed Jan 07 00:00:00 1970 PST | Wed Jan 07 00:00:00 1970 | 6 | 6 | foo | 6 | 7 | AAA006 @@ -4796,6 +4959,7 @@ EXISTS (SELECT 1 FROM ft4 WHERE ft4.c2 = ft2.c2)) AND ft2.c1 > 900 ORDER BY ft2.c1 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -4810,6 +4974,7 @@ EXISTS (SELECT 1 FROM ft4 WHERE ft4.c2 = ft2.c2)) AND ft2.c1 > 900 ORDER BY ft2.c1 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 -----+----+-------+------------------------------+--------------------------+----+------------+----- 903 | 3 | 00903 | Sun Jan 04 00:00:00 1970 PST | Sun Jan 04 00:00:00 1970 | 3 | 3 | foo @@ -4832,6 +4997,7 @@ EXISTS (SELECT 1 FROM ft4 WHERE ft4.c2 = ft2.c2) AND c1 = ftupper.c1 ) AND ftupper.c1 > 900 ORDER BY ftupper.c1 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -4846,6 +5012,7 @@ EXISTS (SELECT 1 FROM ft4 WHERE ft4.c2 = ft2.c2) AND c1 = ftupper.c1 ) AND ftupper.c1 > 900 ORDER BY ftupper.c1 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 -----+----+-------+------------------------------+--------------------------+----+------------+----- 903 | 3 | 00903 | Sun Jan 04 00:00:00 1970 PST | Sun Jan 04 00:00:00 1970 | 3 | 3 | foo @@ -4872,6 +5039,7 @@ ON ft2.c2 = ft21.c2 WHERE ft2.c1 > 900 ORDER BY ft2.c1 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -4890,6 +5058,7 @@ ON ft2.c2 = ft21.c2 WHERE ft2.c1 > 900 ORDER BY ft2.c1 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 | c1 | c2 | c3 ----+----+----+----+----+----+----+----+----+----+---- (0 rows) @@ -4900,6 +5069,7 @@ ft1.c1 IN ( SELECT ft2.c1 FROM ft2 JOIN ft4 ON ft2.c1 = ft4.c1) ORDER BY ft1.c1 LIMIT 5; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------- Limit @@ -4922,6 +5092,7 @@ -- =================================================================== EXPLAIN (verbose, costs off) INSERT INTO ft2 (c1,c2,c3) SELECT c1+1000,c2+100, c3 || c3 FROM ft2 LIMIT 20; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Insert on public.ft2 @@ -4935,8 +5106,10 @@ (8 rows) INSERT INTO ft2 (c1,c2,c3) SELECT c1+1000,c2+100, c3 || c3 FROM ft2 LIMIT 20; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree INSERT INTO ft2 (c1,c2,c3) VALUES (1101,201,'aaa'), (1102,202,'bbb'), (1103,203,'ccc') RETURNING *; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 ------+-----+-----+----+----+----+------------+---- 1101 | 201 | aaa | | | | ft2 | @@ -4945,8 +5118,10 @@ (3 rows) INSERT INTO ft2 (c1,c2,c3) VALUES (1104,204,'ddd'), (1105,205,'eee'); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree EXPLAIN (verbose, costs off) UPDATE ft2 SET c2 = c2 + 300, c3 = c3 || '_update3' WHERE c1 % 10 = 3; -- can be pushed down +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ---------------------------------------------------------------------------------------------------------------- Update on public.ft2 @@ -4955,8 +5130,10 @@ (3 rows) UPDATE ft2 SET c2 = c2 + 300, c3 = c3 || '_update3' WHERE c1 % 10 = 3; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree EXPLAIN (verbose, costs off) UPDATE ft2 SET c2 = c2 + 400, c3 = c3 || '_update7' WHERE c1 % 10 = 7 RETURNING *; -- can be pushed down +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------ Update on public.ft2 @@ -4966,6 +5143,7 @@ (4 rows) UPDATE ft2 SET c2 = c2 + 400, c3 = c3 || '_update7' WHERE c1 % 10 = 7 RETURNING *; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 ------+-----+--------------------+------------------------------+--------------------------+----+------------+----- 7 | 407 | 00007_update7 | Thu Jan 08 00:00:00 1970 PST | Thu Jan 08 00:00:00 1970 | 7 | 7 | foo @@ -5075,17 +5253,15 @@ EXPLAIN (verbose, costs off) UPDATE ft2 SET c2 = ft2.c2 + 500, c3 = ft2.c3 || '_update9', c7 = DEFAULT FROM ft1 WHERE ft1.c1 = ft2.c2 AND ft1.c1 % 10 = 9; -- can be pushed down - QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - Update on public.ft2 - -> Foreign Update - Remote SQL: UPDATE "S 1"."T 1" r1 SET c2 = (r1.c2 + 500), c3 = (r1.c3 || '_update9'), c7 = 'ft2 '::character(10) FROM "S 1"."T 1" r2 WHERE ((r1.c2 = r2."C 1")) AND (((r2."C 1" % 10) = 9)) -(3 rows) - +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +ERROR: could not find junk ctid1 column UPDATE ft2 SET c2 = ft2.c2 + 500, c3 = ft2.c3 || '_update9', c7 = DEFAULT FROM ft1 WHERE ft1.c1 = ft2.c2 AND ft1.c1 % 10 = 9; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +ERROR: could not find junk ctid1 column EXPLAIN (verbose, costs off) DELETE FROM ft2 WHERE c1 % 10 = 5 RETURNING c1, c4; -- can be pushed down +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN -------------------------------------------------------------------------------------------- Delete on public.ft2 @@ -5095,6 +5271,7 @@ (4 rows) DELETE FROM ft2 WHERE c1 % 10 = 5 RETURNING c1, c4; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c4 ------+------------------------------ 5 | Tue Jan 06 00:00:00 1970 PST @@ -5204,840 +5381,942 @@ EXPLAIN (verbose, costs off) DELETE FROM ft2 USING ft1 WHERE ft1.c1 = ft2.c2 AND ft1.c1 % 10 = 2; -- can be pushed down - QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------- - Delete on public.ft2 - -> Foreign Delete - Remote SQL: DELETE FROM "S 1"."T 1" r1 USING "S 1"."T 1" r2 WHERE ((r1.c2 = r2."C 1")) AND (((r2."C 1" % 10) = 2)) -(3 rows) - +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +ERROR: could not find junk ctid1 column DELETE FROM ft2 USING ft1 WHERE ft1.c1 = ft2.c2 AND ft1.c1 % 10 = 2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +ERROR: could not find junk ctid1 column SELECT c1,c2,c3,c4 FROM ft2 ORDER BY c1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 | c4 ------+-----+--------------------+------------------------------ 1 | 1 | 00001 | Fri Jan 02 00:00:00 1970 PST + 2 | 2 | 00002 | Sat Jan 03 00:00:00 1970 PST 3 | 303 | 00003_update3 | Sun Jan 04 00:00:00 1970 PST 4 | 4 | 00004 | Mon Jan 05 00:00:00 1970 PST 6 | 6 | 00006 | Wed Jan 07 00:00:00 1970 PST 7 | 407 | 00007_update7 | Thu Jan 08 00:00:00 1970 PST 8 | 8 | 00008 | Fri Jan 09 00:00:00 1970 PST - 9 | 509 | 00009_update9 | Sat Jan 10 00:00:00 1970 PST + 9 | 9 | 00009 | Sat Jan 10 00:00:00 1970 PST 10 | 0 | 00010 | Sun Jan 11 00:00:00 1970 PST 11 | 1 | 00011 | Mon Jan 12 00:00:00 1970 PST + 12 | 2 | 00012 | Tue Jan 13 00:00:00 1970 PST 13 | 303 | 00013_update3 | Wed Jan 14 00:00:00 1970 PST 14 | 4 | 00014 | Thu Jan 15 00:00:00 1970 PST 16 | 6 | 00016 | Sat Jan 17 00:00:00 1970 PST 17 | 407 | 00017_update7 | Sun Jan 18 00:00:00 1970 PST 18 | 8 | 00018 | Mon Jan 19 00:00:00 1970 PST - 19 | 509 | 00019_update9 | Tue Jan 20 00:00:00 1970 PST + 19 | 9 | 00019 | Tue Jan 20 00:00:00 1970 PST 20 | 0 | 00020 | Wed Jan 21 00:00:00 1970 PST 21 | 1 | 00021 | Thu Jan 22 00:00:00 1970 PST + 22 | 2 | 00022 | Fri Jan 23 00:00:00 1970 PST 23 | 303 | 00023_update3 | Sat Jan 24 00:00:00 1970 PST 24 | 4 | 00024 | Sun Jan 25 00:00:00 1970 PST 26 | 6 | 00026 | Tue Jan 27 00:00:00 1970 PST 27 | 407 | 00027_update7 | Wed Jan 28 00:00:00 1970 PST 28 | 8 | 00028 | Thu Jan 29 00:00:00 1970 PST - 29 | 509 | 00029_update9 | Fri Jan 30 00:00:00 1970 PST + 29 | 9 | 00029 | Fri Jan 30 00:00:00 1970 PST 30 | 0 | 00030 | Sat Jan 31 00:00:00 1970 PST 31 | 1 | 00031 | Sun Feb 01 00:00:00 1970 PST + 32 | 2 | 00032 | Mon Feb 02 00:00:00 1970 PST 33 | 303 | 00033_update3 | Tue Feb 03 00:00:00 1970 PST 34 | 4 | 00034 | Wed Feb 04 00:00:00 1970 PST 36 | 6 | 00036 | Fri Feb 06 00:00:00 1970 PST 37 | 407 | 00037_update7 | Sat Feb 07 00:00:00 1970 PST 38 | 8 | 00038 | Sun Feb 08 00:00:00 1970 PST - 39 | 509 | 00039_update9 | Mon Feb 09 00:00:00 1970 PST + 39 | 9 | 00039 | Mon Feb 09 00:00:00 1970 PST 40 | 0 | 00040 | Tue Feb 10 00:00:00 1970 PST 41 | 1 | 00041 | Wed Feb 11 00:00:00 1970 PST + 42 | 2 | 00042 | Thu Feb 12 00:00:00 1970 PST 43 | 303 | 00043_update3 | Fri Feb 13 00:00:00 1970 PST 44 | 4 | 00044 | Sat Feb 14 00:00:00 1970 PST 46 | 6 | 00046 | Mon Feb 16 00:00:00 1970 PST 47 | 407 | 00047_update7 | Tue Feb 17 00:00:00 1970 PST 48 | 8 | 00048 | Wed Feb 18 00:00:00 1970 PST - 49 | 509 | 00049_update9 | Thu Feb 19 00:00:00 1970 PST + 49 | 9 | 00049 | Thu Feb 19 00:00:00 1970 PST 50 | 0 | 00050 | Fri Feb 20 00:00:00 1970 PST 51 | 1 | 00051 | Sat Feb 21 00:00:00 1970 PST + 52 | 2 | 00052 | Sun Feb 22 00:00:00 1970 PST 53 | 303 | 00053_update3 | Mon Feb 23 00:00:00 1970 PST 54 | 4 | 00054 | Tue Feb 24 00:00:00 1970 PST 56 | 6 | 00056 | Thu Feb 26 00:00:00 1970 PST 57 | 407 | 00057_update7 | Fri Feb 27 00:00:00 1970 PST 58 | 8 | 00058 | Sat Feb 28 00:00:00 1970 PST - 59 | 509 | 00059_update9 | Sun Mar 01 00:00:00 1970 PST + 59 | 9 | 00059 | Sun Mar 01 00:00:00 1970 PST 60 | 0 | 00060 | Mon Mar 02 00:00:00 1970 PST 61 | 1 | 00061 | Tue Mar 03 00:00:00 1970 PST + 62 | 2 | 00062 | Wed Mar 04 00:00:00 1970 PST 63 | 303 | 00063_update3 | Thu Mar 05 00:00:00 1970 PST 64 | 4 | 00064 | Fri Mar 06 00:00:00 1970 PST 66 | 6 | 00066 | Sun Mar 08 00:00:00 1970 PST 67 | 407 | 00067_update7 | Mon Mar 09 00:00:00 1970 PST 68 | 8 | 00068 | Tue Mar 10 00:00:00 1970 PST - 69 | 509 | 00069_update9 | Wed Mar 11 00:00:00 1970 PST + 69 | 9 | 00069 | Wed Mar 11 00:00:00 1970 PST 70 | 0 | 00070 | Thu Mar 12 00:00:00 1970 PST 71 | 1 | 00071 | Fri Mar 13 00:00:00 1970 PST + 72 | 2 | 00072 | Sat Mar 14 00:00:00 1970 PST 73 | 303 | 00073_update3 | Sun Mar 15 00:00:00 1970 PST 74 | 4 | 00074 | Mon Mar 16 00:00:00 1970 PST 76 | 6 | 00076 | Wed Mar 18 00:00:00 1970 PST 77 | 407 | 00077_update7 | Thu Mar 19 00:00:00 1970 PST 78 | 8 | 00078 | Fri Mar 20 00:00:00 1970 PST - 79 | 509 | 00079_update9 | Sat Mar 21 00:00:00 1970 PST + 79 | 9 | 00079 | Sat Mar 21 00:00:00 1970 PST 80 | 0 | 00080 | Sun Mar 22 00:00:00 1970 PST 81 | 1 | 00081 | Mon Mar 23 00:00:00 1970 PST + 82 | 2 | 00082 | Tue Mar 24 00:00:00 1970 PST 83 | 303 | 00083_update3 | Wed Mar 25 00:00:00 1970 PST 84 | 4 | 00084 | Thu Mar 26 00:00:00 1970 PST 86 | 6 | 00086 | Sat Mar 28 00:00:00 1970 PST 87 | 407 | 00087_update7 | Sun Mar 29 00:00:00 1970 PST 88 | 8 | 00088 | Mon Mar 30 00:00:00 1970 PST - 89 | 509 | 00089_update9 | Tue Mar 31 00:00:00 1970 PST + 89 | 9 | 00089 | Tue Mar 31 00:00:00 1970 PST 90 | 0 | 00090 | Wed Apr 01 00:00:00 1970 PST 91 | 1 | 00091 | Thu Apr 02 00:00:00 1970 PST + 92 | 2 | 00092 | Fri Apr 03 00:00:00 1970 PST 93 | 303 | 00093_update3 | Sat Apr 04 00:00:00 1970 PST 94 | 4 | 00094 | Sun Apr 05 00:00:00 1970 PST 96 | 6 | 00096 | Tue Apr 07 00:00:00 1970 PST 97 | 407 | 00097_update7 | Wed Apr 08 00:00:00 1970 PST 98 | 8 | 00098 | Thu Apr 09 00:00:00 1970 PST - 99 | 509 | 00099_update9 | Fri Apr 10 00:00:00 1970 PST + 99 | 9 | 00099 | Fri Apr 10 00:00:00 1970 PST 100 | 0 | 00100 | Thu Jan 01 00:00:00 1970 PST 101 | 1 | 00101 | Fri Jan 02 00:00:00 1970 PST + 102 | 2 | 00102 | Sat Jan 03 00:00:00 1970 PST 103 | 303 | 00103_update3 | Sun Jan 04 00:00:00 1970 PST 104 | 4 | 00104 | Mon Jan 05 00:00:00 1970 PST 106 | 6 | 00106 | Wed Jan 07 00:00:00 1970 PST 107 | 407 | 00107_update7 | Thu Jan 08 00:00:00 1970 PST 108 | 8 | 00108 | Fri Jan 09 00:00:00 1970 PST - 109 | 509 | 00109_update9 | Sat Jan 10 00:00:00 1970 PST + 109 | 9 | 00109 | Sat Jan 10 00:00:00 1970 PST 110 | 0 | 00110 | Sun Jan 11 00:00:00 1970 PST 111 | 1 | 00111 | Mon Jan 12 00:00:00 1970 PST + 112 | 2 | 00112 | Tue Jan 13 00:00:00 1970 PST 113 | 303 | 00113_update3 | Wed Jan 14 00:00:00 1970 PST 114 | 4 | 00114 | Thu Jan 15 00:00:00 1970 PST 116 | 6 | 00116 | Sat Jan 17 00:00:00 1970 PST 117 | 407 | 00117_update7 | Sun Jan 18 00:00:00 1970 PST 118 | 8 | 00118 | Mon Jan 19 00:00:00 1970 PST - 119 | 509 | 00119_update9 | Tue Jan 20 00:00:00 1970 PST + 119 | 9 | 00119 | Tue Jan 20 00:00:00 1970 PST 120 | 0 | 00120 | Wed Jan 21 00:00:00 1970 PST 121 | 1 | 00121 | Thu Jan 22 00:00:00 1970 PST + 122 | 2 | 00122 | Fri Jan 23 00:00:00 1970 PST 123 | 303 | 00123_update3 | Sat Jan 24 00:00:00 1970 PST 124 | 4 | 00124 | Sun Jan 25 00:00:00 1970 PST 126 | 6 | 00126 | Tue Jan 27 00:00:00 1970 PST 127 | 407 | 00127_update7 | Wed Jan 28 00:00:00 1970 PST 128 | 8 | 00128 | Thu Jan 29 00:00:00 1970 PST - 129 | 509 | 00129_update9 | Fri Jan 30 00:00:00 1970 PST + 129 | 9 | 00129 | Fri Jan 30 00:00:00 1970 PST 130 | 0 | 00130 | Sat Jan 31 00:00:00 1970 PST 131 | 1 | 00131 | Sun Feb 01 00:00:00 1970 PST + 132 | 2 | 00132 | Mon Feb 02 00:00:00 1970 PST 133 | 303 | 00133_update3 | Tue Feb 03 00:00:00 1970 PST 134 | 4 | 00134 | Wed Feb 04 00:00:00 1970 PST 136 | 6 | 00136 | Fri Feb 06 00:00:00 1970 PST 137 | 407 | 00137_update7 | Sat Feb 07 00:00:00 1970 PST 138 | 8 | 00138 | Sun Feb 08 00:00:00 1970 PST - 139 | 509 | 00139_update9 | Mon Feb 09 00:00:00 1970 PST + 139 | 9 | 00139 | Mon Feb 09 00:00:00 1970 PST 140 | 0 | 00140 | Tue Feb 10 00:00:00 1970 PST 141 | 1 | 00141 | Wed Feb 11 00:00:00 1970 PST + 142 | 2 | 00142 | Thu Feb 12 00:00:00 1970 PST 143 | 303 | 00143_update3 | Fri Feb 13 00:00:00 1970 PST 144 | 4 | 00144 | Sat Feb 14 00:00:00 1970 PST 146 | 6 | 00146 | Mon Feb 16 00:00:00 1970 PST 147 | 407 | 00147_update7 | Tue Feb 17 00:00:00 1970 PST 148 | 8 | 00148 | Wed Feb 18 00:00:00 1970 PST - 149 | 509 | 00149_update9 | Thu Feb 19 00:00:00 1970 PST + 149 | 9 | 00149 | Thu Feb 19 00:00:00 1970 PST 150 | 0 | 00150 | Fri Feb 20 00:00:00 1970 PST 151 | 1 | 00151 | Sat Feb 21 00:00:00 1970 PST + 152 | 2 | 00152 | Sun Feb 22 00:00:00 1970 PST 153 | 303 | 00153_update3 | Mon Feb 23 00:00:00 1970 PST 154 | 4 | 00154 | Tue Feb 24 00:00:00 1970 PST 156 | 6 | 00156 | Thu Feb 26 00:00:00 1970 PST 157 | 407 | 00157_update7 | Fri Feb 27 00:00:00 1970 PST 158 | 8 | 00158 | Sat Feb 28 00:00:00 1970 PST - 159 | 509 | 00159_update9 | Sun Mar 01 00:00:00 1970 PST + 159 | 9 | 00159 | Sun Mar 01 00:00:00 1970 PST 160 | 0 | 00160 | Mon Mar 02 00:00:00 1970 PST 161 | 1 | 00161 | Tue Mar 03 00:00:00 1970 PST + 162 | 2 | 00162 | Wed Mar 04 00:00:00 1970 PST 163 | 303 | 00163_update3 | Thu Mar 05 00:00:00 1970 PST 164 | 4 | 00164 | Fri Mar 06 00:00:00 1970 PST 166 | 6 | 00166 | Sun Mar 08 00:00:00 1970 PST 167 | 407 | 00167_update7 | Mon Mar 09 00:00:00 1970 PST 168 | 8 | 00168 | Tue Mar 10 00:00:00 1970 PST - 169 | 509 | 00169_update9 | Wed Mar 11 00:00:00 1970 PST + 169 | 9 | 00169 | Wed Mar 11 00:00:00 1970 PST 170 | 0 | 00170 | Thu Mar 12 00:00:00 1970 PST 171 | 1 | 00171 | Fri Mar 13 00:00:00 1970 PST + 172 | 2 | 00172 | Sat Mar 14 00:00:00 1970 PST 173 | 303 | 00173_update3 | Sun Mar 15 00:00:00 1970 PST 174 | 4 | 00174 | Mon Mar 16 00:00:00 1970 PST 176 | 6 | 00176 | Wed Mar 18 00:00:00 1970 PST 177 | 407 | 00177_update7 | Thu Mar 19 00:00:00 1970 PST 178 | 8 | 00178 | Fri Mar 20 00:00:00 1970 PST - 179 | 509 | 00179_update9 | Sat Mar 21 00:00:00 1970 PST + 179 | 9 | 00179 | Sat Mar 21 00:00:00 1970 PST 180 | 0 | 00180 | Sun Mar 22 00:00:00 1970 PST 181 | 1 | 00181 | Mon Mar 23 00:00:00 1970 PST + 182 | 2 | 00182 | Tue Mar 24 00:00:00 1970 PST 183 | 303 | 00183_update3 | Wed Mar 25 00:00:00 1970 PST 184 | 4 | 00184 | Thu Mar 26 00:00:00 1970 PST 186 | 6 | 00186 | Sat Mar 28 00:00:00 1970 PST 187 | 407 | 00187_update7 | Sun Mar 29 00:00:00 1970 PST 188 | 8 | 00188 | Mon Mar 30 00:00:00 1970 PST - 189 | 509 | 00189_update9 | Tue Mar 31 00:00:00 1970 PST + 189 | 9 | 00189 | Tue Mar 31 00:00:00 1970 PST 190 | 0 | 00190 | Wed Apr 01 00:00:00 1970 PST 191 | 1 | 00191 | Thu Apr 02 00:00:00 1970 PST + 192 | 2 | 00192 | Fri Apr 03 00:00:00 1970 PST 193 | 303 | 00193_update3 | Sat Apr 04 00:00:00 1970 PST 194 | 4 | 00194 | Sun Apr 05 00:00:00 1970 PST 196 | 6 | 00196 | Tue Apr 07 00:00:00 1970 PST 197 | 407 | 00197_update7 | Wed Apr 08 00:00:00 1970 PST 198 | 8 | 00198 | Thu Apr 09 00:00:00 1970 PST - 199 | 509 | 00199_update9 | Fri Apr 10 00:00:00 1970 PST + 199 | 9 | 00199 | Fri Apr 10 00:00:00 1970 PST 200 | 0 | 00200 | Thu Jan 01 00:00:00 1970 PST 201 | 1 | 00201 | Fri Jan 02 00:00:00 1970 PST + 202 | 2 | 00202 | Sat Jan 03 00:00:00 1970 PST 203 | 303 | 00203_update3 | Sun Jan 04 00:00:00 1970 PST 204 | 4 | 00204 | Mon Jan 05 00:00:00 1970 PST 206 | 6 | 00206 | Wed Jan 07 00:00:00 1970 PST 207 | 407 | 00207_update7 | Thu Jan 08 00:00:00 1970 PST 208 | 8 | 00208 | Fri Jan 09 00:00:00 1970 PST - 209 | 509 | 00209_update9 | Sat Jan 10 00:00:00 1970 PST + 209 | 9 | 00209 | Sat Jan 10 00:00:00 1970 PST 210 | 0 | 00210 | Sun Jan 11 00:00:00 1970 PST 211 | 1 | 00211 | Mon Jan 12 00:00:00 1970 PST + 212 | 2 | 00212 | Tue Jan 13 00:00:00 1970 PST 213 | 303 | 00213_update3 | Wed Jan 14 00:00:00 1970 PST 214 | 4 | 00214 | Thu Jan 15 00:00:00 1970 PST 216 | 6 | 00216 | Sat Jan 17 00:00:00 1970 PST 217 | 407 | 00217_update7 | Sun Jan 18 00:00:00 1970 PST 218 | 8 | 00218 | Mon Jan 19 00:00:00 1970 PST - 219 | 509 | 00219_update9 | Tue Jan 20 00:00:00 1970 PST + 219 | 9 | 00219 | Tue Jan 20 00:00:00 1970 PST 220 | 0 | 00220 | Wed Jan 21 00:00:00 1970 PST 221 | 1 | 00221 | Thu Jan 22 00:00:00 1970 PST + 222 | 2 | 00222 | Fri Jan 23 00:00:00 1970 PST 223 | 303 | 00223_update3 | Sat Jan 24 00:00:00 1970 PST 224 | 4 | 00224 | Sun Jan 25 00:00:00 1970 PST 226 | 6 | 00226 | Tue Jan 27 00:00:00 1970 PST 227 | 407 | 00227_update7 | Wed Jan 28 00:00:00 1970 PST 228 | 8 | 00228 | Thu Jan 29 00:00:00 1970 PST - 229 | 509 | 00229_update9 | Fri Jan 30 00:00:00 1970 PST + 229 | 9 | 00229 | Fri Jan 30 00:00:00 1970 PST 230 | 0 | 00230 | Sat Jan 31 00:00:00 1970 PST 231 | 1 | 00231 | Sun Feb 01 00:00:00 1970 PST + 232 | 2 | 00232 | Mon Feb 02 00:00:00 1970 PST 233 | 303 | 00233_update3 | Tue Feb 03 00:00:00 1970 PST 234 | 4 | 00234 | Wed Feb 04 00:00:00 1970 PST 236 | 6 | 00236 | Fri Feb 06 00:00:00 1970 PST 237 | 407 | 00237_update7 | Sat Feb 07 00:00:00 1970 PST 238 | 8 | 00238 | Sun Feb 08 00:00:00 1970 PST - 239 | 509 | 00239_update9 | Mon Feb 09 00:00:00 1970 PST + 239 | 9 | 00239 | Mon Feb 09 00:00:00 1970 PST 240 | 0 | 00240 | Tue Feb 10 00:00:00 1970 PST 241 | 1 | 00241 | Wed Feb 11 00:00:00 1970 PST + 242 | 2 | 00242 | Thu Feb 12 00:00:00 1970 PST 243 | 303 | 00243_update3 | Fri Feb 13 00:00:00 1970 PST 244 | 4 | 00244 | Sat Feb 14 00:00:00 1970 PST 246 | 6 | 00246 | Mon Feb 16 00:00:00 1970 PST 247 | 407 | 00247_update7 | Tue Feb 17 00:00:00 1970 PST 248 | 8 | 00248 | Wed Feb 18 00:00:00 1970 PST - 249 | 509 | 00249_update9 | Thu Feb 19 00:00:00 1970 PST + 249 | 9 | 00249 | Thu Feb 19 00:00:00 1970 PST 250 | 0 | 00250 | Fri Feb 20 00:00:00 1970 PST 251 | 1 | 00251 | Sat Feb 21 00:00:00 1970 PST + 252 | 2 | 00252 | Sun Feb 22 00:00:00 1970 PST 253 | 303 | 00253_update3 | Mon Feb 23 00:00:00 1970 PST 254 | 4 | 00254 | Tue Feb 24 00:00:00 1970 PST 256 | 6 | 00256 | Thu Feb 26 00:00:00 1970 PST 257 | 407 | 00257_update7 | Fri Feb 27 00:00:00 1970 PST 258 | 8 | 00258 | Sat Feb 28 00:00:00 1970 PST - 259 | 509 | 00259_update9 | Sun Mar 01 00:00:00 1970 PST + 259 | 9 | 00259 | Sun Mar 01 00:00:00 1970 PST 260 | 0 | 00260 | Mon Mar 02 00:00:00 1970 PST 261 | 1 | 00261 | Tue Mar 03 00:00:00 1970 PST + 262 | 2 | 00262 | Wed Mar 04 00:00:00 1970 PST 263 | 303 | 00263_update3 | Thu Mar 05 00:00:00 1970 PST 264 | 4 | 00264 | Fri Mar 06 00:00:00 1970 PST 266 | 6 | 00266 | Sun Mar 08 00:00:00 1970 PST 267 | 407 | 00267_update7 | Mon Mar 09 00:00:00 1970 PST 268 | 8 | 00268 | Tue Mar 10 00:00:00 1970 PST - 269 | 509 | 00269_update9 | Wed Mar 11 00:00:00 1970 PST + 269 | 9 | 00269 | Wed Mar 11 00:00:00 1970 PST 270 | 0 | 00270 | Thu Mar 12 00:00:00 1970 PST 271 | 1 | 00271 | Fri Mar 13 00:00:00 1970 PST + 272 | 2 | 00272 | Sat Mar 14 00:00:00 1970 PST 273 | 303 | 00273_update3 | Sun Mar 15 00:00:00 1970 PST 274 | 4 | 00274 | Mon Mar 16 00:00:00 1970 PST 276 | 6 | 00276 | Wed Mar 18 00:00:00 1970 PST 277 | 407 | 00277_update7 | Thu Mar 19 00:00:00 1970 PST 278 | 8 | 00278 | Fri Mar 20 00:00:00 1970 PST - 279 | 509 | 00279_update9 | Sat Mar 21 00:00:00 1970 PST + 279 | 9 | 00279 | Sat Mar 21 00:00:00 1970 PST 280 | 0 | 00280 | Sun Mar 22 00:00:00 1970 PST 281 | 1 | 00281 | Mon Mar 23 00:00:00 1970 PST + 282 | 2 | 00282 | Tue Mar 24 00:00:00 1970 PST 283 | 303 | 00283_update3 | Wed Mar 25 00:00:00 1970 PST 284 | 4 | 00284 | Thu Mar 26 00:00:00 1970 PST 286 | 6 | 00286 | Sat Mar 28 00:00:00 1970 PST 287 | 407 | 00287_update7 | Sun Mar 29 00:00:00 1970 PST 288 | 8 | 00288 | Mon Mar 30 00:00:00 1970 PST - 289 | 509 | 00289_update9 | Tue Mar 31 00:00:00 1970 PST + 289 | 9 | 00289 | Tue Mar 31 00:00:00 1970 PST 290 | 0 | 00290 | Wed Apr 01 00:00:00 1970 PST 291 | 1 | 00291 | Thu Apr 02 00:00:00 1970 PST + 292 | 2 | 00292 | Fri Apr 03 00:00:00 1970 PST 293 | 303 | 00293_update3 | Sat Apr 04 00:00:00 1970 PST 294 | 4 | 00294 | Sun Apr 05 00:00:00 1970 PST 296 | 6 | 00296 | Tue Apr 07 00:00:00 1970 PST 297 | 407 | 00297_update7 | Wed Apr 08 00:00:00 1970 PST 298 | 8 | 00298 | Thu Apr 09 00:00:00 1970 PST - 299 | 509 | 00299_update9 | Fri Apr 10 00:00:00 1970 PST + 299 | 9 | 00299 | Fri Apr 10 00:00:00 1970 PST 300 | 0 | 00300 | Thu Jan 01 00:00:00 1970 PST 301 | 1 | 00301 | Fri Jan 02 00:00:00 1970 PST + 302 | 2 | 00302 | Sat Jan 03 00:00:00 1970 PST 303 | 303 | 00303_update3 | Sun Jan 04 00:00:00 1970 PST 304 | 4 | 00304 | Mon Jan 05 00:00:00 1970 PST 306 | 6 | 00306 | Wed Jan 07 00:00:00 1970 PST 307 | 407 | 00307_update7 | Thu Jan 08 00:00:00 1970 PST 308 | 8 | 00308 | Fri Jan 09 00:00:00 1970 PST - 309 | 509 | 00309_update9 | Sat Jan 10 00:00:00 1970 PST + 309 | 9 | 00309 | Sat Jan 10 00:00:00 1970 PST 310 | 0 | 00310 | Sun Jan 11 00:00:00 1970 PST 311 | 1 | 00311 | Mon Jan 12 00:00:00 1970 PST + 312 | 2 | 00312 | Tue Jan 13 00:00:00 1970 PST 313 | 303 | 00313_update3 | Wed Jan 14 00:00:00 1970 PST 314 | 4 | 00314 | Thu Jan 15 00:00:00 1970 PST 316 | 6 | 00316 | Sat Jan 17 00:00:00 1970 PST 317 | 407 | 00317_update7 | Sun Jan 18 00:00:00 1970 PST 318 | 8 | 00318 | Mon Jan 19 00:00:00 1970 PST - 319 | 509 | 00319_update9 | Tue Jan 20 00:00:00 1970 PST + 319 | 9 | 00319 | Tue Jan 20 00:00:00 1970 PST 320 | 0 | 00320 | Wed Jan 21 00:00:00 1970 PST 321 | 1 | 00321 | Thu Jan 22 00:00:00 1970 PST + 322 | 2 | 00322 | Fri Jan 23 00:00:00 1970 PST 323 | 303 | 00323_update3 | Sat Jan 24 00:00:00 1970 PST 324 | 4 | 00324 | Sun Jan 25 00:00:00 1970 PST 326 | 6 | 00326 | Tue Jan 27 00:00:00 1970 PST 327 | 407 | 00327_update7 | Wed Jan 28 00:00:00 1970 PST 328 | 8 | 00328 | Thu Jan 29 00:00:00 1970 PST - 329 | 509 | 00329_update9 | Fri Jan 30 00:00:00 1970 PST + 329 | 9 | 00329 | Fri Jan 30 00:00:00 1970 PST 330 | 0 | 00330 | Sat Jan 31 00:00:00 1970 PST 331 | 1 | 00331 | Sun Feb 01 00:00:00 1970 PST + 332 | 2 | 00332 | Mon Feb 02 00:00:00 1970 PST 333 | 303 | 00333_update3 | Tue Feb 03 00:00:00 1970 PST 334 | 4 | 00334 | Wed Feb 04 00:00:00 1970 PST 336 | 6 | 00336 | Fri Feb 06 00:00:00 1970 PST 337 | 407 | 00337_update7 | Sat Feb 07 00:00:00 1970 PST 338 | 8 | 00338 | Sun Feb 08 00:00:00 1970 PST - 339 | 509 | 00339_update9 | Mon Feb 09 00:00:00 1970 PST + 339 | 9 | 00339 | Mon Feb 09 00:00:00 1970 PST 340 | 0 | 00340 | Tue Feb 10 00:00:00 1970 PST 341 | 1 | 00341 | Wed Feb 11 00:00:00 1970 PST + 342 | 2 | 00342 | Thu Feb 12 00:00:00 1970 PST 343 | 303 | 00343_update3 | Fri Feb 13 00:00:00 1970 PST 344 | 4 | 00344 | Sat Feb 14 00:00:00 1970 PST 346 | 6 | 00346 | Mon Feb 16 00:00:00 1970 PST 347 | 407 | 00347_update7 | Tue Feb 17 00:00:00 1970 PST 348 | 8 | 00348 | Wed Feb 18 00:00:00 1970 PST - 349 | 509 | 00349_update9 | Thu Feb 19 00:00:00 1970 PST + 349 | 9 | 00349 | Thu Feb 19 00:00:00 1970 PST 350 | 0 | 00350 | Fri Feb 20 00:00:00 1970 PST 351 | 1 | 00351 | Sat Feb 21 00:00:00 1970 PST + 352 | 2 | 00352 | Sun Feb 22 00:00:00 1970 PST 353 | 303 | 00353_update3 | Mon Feb 23 00:00:00 1970 PST 354 | 4 | 00354 | Tue Feb 24 00:00:00 1970 PST 356 | 6 | 00356 | Thu Feb 26 00:00:00 1970 PST 357 | 407 | 00357_update7 | Fri Feb 27 00:00:00 1970 PST 358 | 8 | 00358 | Sat Feb 28 00:00:00 1970 PST - 359 | 509 | 00359_update9 | Sun Mar 01 00:00:00 1970 PST + 359 | 9 | 00359 | Sun Mar 01 00:00:00 1970 PST 360 | 0 | 00360 | Mon Mar 02 00:00:00 1970 PST 361 | 1 | 00361 | Tue Mar 03 00:00:00 1970 PST + 362 | 2 | 00362 | Wed Mar 04 00:00:00 1970 PST 363 | 303 | 00363_update3 | Thu Mar 05 00:00:00 1970 PST 364 | 4 | 00364 | Fri Mar 06 00:00:00 1970 PST 366 | 6 | 00366 | Sun Mar 08 00:00:00 1970 PST 367 | 407 | 00367_update7 | Mon Mar 09 00:00:00 1970 PST 368 | 8 | 00368 | Tue Mar 10 00:00:00 1970 PST - 369 | 509 | 00369_update9 | Wed Mar 11 00:00:00 1970 PST + 369 | 9 | 00369 | Wed Mar 11 00:00:00 1970 PST 370 | 0 | 00370 | Thu Mar 12 00:00:00 1970 PST 371 | 1 | 00371 | Fri Mar 13 00:00:00 1970 PST + 372 | 2 | 00372 | Sat Mar 14 00:00:00 1970 PST 373 | 303 | 00373_update3 | Sun Mar 15 00:00:00 1970 PST 374 | 4 | 00374 | Mon Mar 16 00:00:00 1970 PST 376 | 6 | 00376 | Wed Mar 18 00:00:00 1970 PST 377 | 407 | 00377_update7 | Thu Mar 19 00:00:00 1970 PST 378 | 8 | 00378 | Fri Mar 20 00:00:00 1970 PST - 379 | 509 | 00379_update9 | Sat Mar 21 00:00:00 1970 PST + 379 | 9 | 00379 | Sat Mar 21 00:00:00 1970 PST 380 | 0 | 00380 | Sun Mar 22 00:00:00 1970 PST 381 | 1 | 00381 | Mon Mar 23 00:00:00 1970 PST + 382 | 2 | 00382 | Tue Mar 24 00:00:00 1970 PST 383 | 303 | 00383_update3 | Wed Mar 25 00:00:00 1970 PST 384 | 4 | 00384 | Thu Mar 26 00:00:00 1970 PST 386 | 6 | 00386 | Sat Mar 28 00:00:00 1970 PST 387 | 407 | 00387_update7 | Sun Mar 29 00:00:00 1970 PST 388 | 8 | 00388 | Mon Mar 30 00:00:00 1970 PST - 389 | 509 | 00389_update9 | Tue Mar 31 00:00:00 1970 PST + 389 | 9 | 00389 | Tue Mar 31 00:00:00 1970 PST 390 | 0 | 00390 | Wed Apr 01 00:00:00 1970 PST 391 | 1 | 00391 | Thu Apr 02 00:00:00 1970 PST + 392 | 2 | 00392 | Fri Apr 03 00:00:00 1970 PST 393 | 303 | 00393_update3 | Sat Apr 04 00:00:00 1970 PST 394 | 4 | 00394 | Sun Apr 05 00:00:00 1970 PST 396 | 6 | 00396 | Tue Apr 07 00:00:00 1970 PST 397 | 407 | 00397_update7 | Wed Apr 08 00:00:00 1970 PST 398 | 8 | 00398 | Thu Apr 09 00:00:00 1970 PST - 399 | 509 | 00399_update9 | Fri Apr 10 00:00:00 1970 PST + 399 | 9 | 00399 | Fri Apr 10 00:00:00 1970 PST 400 | 0 | 00400 | Thu Jan 01 00:00:00 1970 PST 401 | 1 | 00401 | Fri Jan 02 00:00:00 1970 PST + 402 | 2 | 00402 | Sat Jan 03 00:00:00 1970 PST 403 | 303 | 00403_update3 | Sun Jan 04 00:00:00 1970 PST 404 | 4 | 00404 | Mon Jan 05 00:00:00 1970 PST 406 | 6 | 00406 | Wed Jan 07 00:00:00 1970 PST 407 | 407 | 00407_update7 | Thu Jan 08 00:00:00 1970 PST 408 | 8 | 00408 | Fri Jan 09 00:00:00 1970 PST - 409 | 509 | 00409_update9 | Sat Jan 10 00:00:00 1970 PST + 409 | 9 | 00409 | Sat Jan 10 00:00:00 1970 PST 410 | 0 | 00410 | Sun Jan 11 00:00:00 1970 PST 411 | 1 | 00411 | Mon Jan 12 00:00:00 1970 PST + 412 | 2 | 00412 | Tue Jan 13 00:00:00 1970 PST 413 | 303 | 00413_update3 | Wed Jan 14 00:00:00 1970 PST 414 | 4 | 00414 | Thu Jan 15 00:00:00 1970 PST 416 | 6 | 00416 | Sat Jan 17 00:00:00 1970 PST 417 | 407 | 00417_update7 | Sun Jan 18 00:00:00 1970 PST 418 | 8 | 00418 | Mon Jan 19 00:00:00 1970 PST - 419 | 509 | 00419_update9 | Tue Jan 20 00:00:00 1970 PST + 419 | 9 | 00419 | Tue Jan 20 00:00:00 1970 PST 420 | 0 | 00420 | Wed Jan 21 00:00:00 1970 PST 421 | 1 | 00421 | Thu Jan 22 00:00:00 1970 PST + 422 | 2 | 00422 | Fri Jan 23 00:00:00 1970 PST 423 | 303 | 00423_update3 | Sat Jan 24 00:00:00 1970 PST 424 | 4 | 00424 | Sun Jan 25 00:00:00 1970 PST 426 | 6 | 00426 | Tue Jan 27 00:00:00 1970 PST 427 | 407 | 00427_update7 | Wed Jan 28 00:00:00 1970 PST 428 | 8 | 00428 | Thu Jan 29 00:00:00 1970 PST - 429 | 509 | 00429_update9 | Fri Jan 30 00:00:00 1970 PST + 429 | 9 | 00429 | Fri Jan 30 00:00:00 1970 PST 430 | 0 | 00430 | Sat Jan 31 00:00:00 1970 PST 431 | 1 | 00431 | Sun Feb 01 00:00:00 1970 PST + 432 | 2 | 00432 | Mon Feb 02 00:00:00 1970 PST 433 | 303 | 00433_update3 | Tue Feb 03 00:00:00 1970 PST 434 | 4 | 00434 | Wed Feb 04 00:00:00 1970 PST 436 | 6 | 00436 | Fri Feb 06 00:00:00 1970 PST 437 | 407 | 00437_update7 | Sat Feb 07 00:00:00 1970 PST 438 | 8 | 00438 | Sun Feb 08 00:00:00 1970 PST - 439 | 509 | 00439_update9 | Mon Feb 09 00:00:00 1970 PST + 439 | 9 | 00439 | Mon Feb 09 00:00:00 1970 PST 440 | 0 | 00440 | Tue Feb 10 00:00:00 1970 PST 441 | 1 | 00441 | Wed Feb 11 00:00:00 1970 PST + 442 | 2 | 00442 | Thu Feb 12 00:00:00 1970 PST 443 | 303 | 00443_update3 | Fri Feb 13 00:00:00 1970 PST 444 | 4 | 00444 | Sat Feb 14 00:00:00 1970 PST 446 | 6 | 00446 | Mon Feb 16 00:00:00 1970 PST 447 | 407 | 00447_update7 | Tue Feb 17 00:00:00 1970 PST 448 | 8 | 00448 | Wed Feb 18 00:00:00 1970 PST - 449 | 509 | 00449_update9 | Thu Feb 19 00:00:00 1970 PST + 449 | 9 | 00449 | Thu Feb 19 00:00:00 1970 PST 450 | 0 | 00450 | Fri Feb 20 00:00:00 1970 PST 451 | 1 | 00451 | Sat Feb 21 00:00:00 1970 PST + 452 | 2 | 00452 | Sun Feb 22 00:00:00 1970 PST 453 | 303 | 00453_update3 | Mon Feb 23 00:00:00 1970 PST 454 | 4 | 00454 | Tue Feb 24 00:00:00 1970 PST 456 | 6 | 00456 | Thu Feb 26 00:00:00 1970 PST 457 | 407 | 00457_update7 | Fri Feb 27 00:00:00 1970 PST 458 | 8 | 00458 | Sat Feb 28 00:00:00 1970 PST - 459 | 509 | 00459_update9 | Sun Mar 01 00:00:00 1970 PST + 459 | 9 | 00459 | Sun Mar 01 00:00:00 1970 PST 460 | 0 | 00460 | Mon Mar 02 00:00:00 1970 PST 461 | 1 | 00461 | Tue Mar 03 00:00:00 1970 PST + 462 | 2 | 00462 | Wed Mar 04 00:00:00 1970 PST 463 | 303 | 00463_update3 | Thu Mar 05 00:00:00 1970 PST 464 | 4 | 00464 | Fri Mar 06 00:00:00 1970 PST 466 | 6 | 00466 | Sun Mar 08 00:00:00 1970 PST 467 | 407 | 00467_update7 | Mon Mar 09 00:00:00 1970 PST 468 | 8 | 00468 | Tue Mar 10 00:00:00 1970 PST - 469 | 509 | 00469_update9 | Wed Mar 11 00:00:00 1970 PST + 469 | 9 | 00469 | Wed Mar 11 00:00:00 1970 PST 470 | 0 | 00470 | Thu Mar 12 00:00:00 1970 PST 471 | 1 | 00471 | Fri Mar 13 00:00:00 1970 PST + 472 | 2 | 00472 | Sat Mar 14 00:00:00 1970 PST 473 | 303 | 00473_update3 | Sun Mar 15 00:00:00 1970 PST 474 | 4 | 00474 | Mon Mar 16 00:00:00 1970 PST 476 | 6 | 00476 | Wed Mar 18 00:00:00 1970 PST 477 | 407 | 00477_update7 | Thu Mar 19 00:00:00 1970 PST 478 | 8 | 00478 | Fri Mar 20 00:00:00 1970 PST - 479 | 509 | 00479_update9 | Sat Mar 21 00:00:00 1970 PST + 479 | 9 | 00479 | Sat Mar 21 00:00:00 1970 PST 480 | 0 | 00480 | Sun Mar 22 00:00:00 1970 PST 481 | 1 | 00481 | Mon Mar 23 00:00:00 1970 PST + 482 | 2 | 00482 | Tue Mar 24 00:00:00 1970 PST 483 | 303 | 00483_update3 | Wed Mar 25 00:00:00 1970 PST 484 | 4 | 00484 | Thu Mar 26 00:00:00 1970 PST 486 | 6 | 00486 | Sat Mar 28 00:00:00 1970 PST 487 | 407 | 00487_update7 | Sun Mar 29 00:00:00 1970 PST 488 | 8 | 00488 | Mon Mar 30 00:00:00 1970 PST - 489 | 509 | 00489_update9 | Tue Mar 31 00:00:00 1970 PST + 489 | 9 | 00489 | Tue Mar 31 00:00:00 1970 PST 490 | 0 | 00490 | Wed Apr 01 00:00:00 1970 PST 491 | 1 | 00491 | Thu Apr 02 00:00:00 1970 PST + 492 | 2 | 00492 | Fri Apr 03 00:00:00 1970 PST 493 | 303 | 00493_update3 | Sat Apr 04 00:00:00 1970 PST 494 | 4 | 00494 | Sun Apr 05 00:00:00 1970 PST 496 | 6 | 00496 | Tue Apr 07 00:00:00 1970 PST 497 | 407 | 00497_update7 | Wed Apr 08 00:00:00 1970 PST 498 | 8 | 00498 | Thu Apr 09 00:00:00 1970 PST - 499 | 509 | 00499_update9 | Fri Apr 10 00:00:00 1970 PST + 499 | 9 | 00499 | Fri Apr 10 00:00:00 1970 PST 500 | 0 | 00500 | Thu Jan 01 00:00:00 1970 PST 501 | 1 | 00501 | Fri Jan 02 00:00:00 1970 PST + 502 | 2 | 00502 | Sat Jan 03 00:00:00 1970 PST 503 | 303 | 00503_update3 | Sun Jan 04 00:00:00 1970 PST 504 | 4 | 00504 | Mon Jan 05 00:00:00 1970 PST 506 | 6 | 00506 | Wed Jan 07 00:00:00 1970 PST 507 | 407 | 00507_update7 | Thu Jan 08 00:00:00 1970 PST 508 | 8 | 00508 | Fri Jan 09 00:00:00 1970 PST - 509 | 509 | 00509_update9 | Sat Jan 10 00:00:00 1970 PST + 509 | 9 | 00509 | Sat Jan 10 00:00:00 1970 PST 510 | 0 | 00510 | Sun Jan 11 00:00:00 1970 PST 511 | 1 | 00511 | Mon Jan 12 00:00:00 1970 PST + 512 | 2 | 00512 | Tue Jan 13 00:00:00 1970 PST 513 | 303 | 00513_update3 | Wed Jan 14 00:00:00 1970 PST 514 | 4 | 00514 | Thu Jan 15 00:00:00 1970 PST 516 | 6 | 00516 | Sat Jan 17 00:00:00 1970 PST 517 | 407 | 00517_update7 | Sun Jan 18 00:00:00 1970 PST 518 | 8 | 00518 | Mon Jan 19 00:00:00 1970 PST - 519 | 509 | 00519_update9 | Tue Jan 20 00:00:00 1970 PST + 519 | 9 | 00519 | Tue Jan 20 00:00:00 1970 PST 520 | 0 | 00520 | Wed Jan 21 00:00:00 1970 PST 521 | 1 | 00521 | Thu Jan 22 00:00:00 1970 PST + 522 | 2 | 00522 | Fri Jan 23 00:00:00 1970 PST 523 | 303 | 00523_update3 | Sat Jan 24 00:00:00 1970 PST 524 | 4 | 00524 | Sun Jan 25 00:00:00 1970 PST 526 | 6 | 00526 | Tue Jan 27 00:00:00 1970 PST 527 | 407 | 00527_update7 | Wed Jan 28 00:00:00 1970 PST 528 | 8 | 00528 | Thu Jan 29 00:00:00 1970 PST - 529 | 509 | 00529_update9 | Fri Jan 30 00:00:00 1970 PST + 529 | 9 | 00529 | Fri Jan 30 00:00:00 1970 PST 530 | 0 | 00530 | Sat Jan 31 00:00:00 1970 PST 531 | 1 | 00531 | Sun Feb 01 00:00:00 1970 PST + 532 | 2 | 00532 | Mon Feb 02 00:00:00 1970 PST 533 | 303 | 00533_update3 | Tue Feb 03 00:00:00 1970 PST 534 | 4 | 00534 | Wed Feb 04 00:00:00 1970 PST 536 | 6 | 00536 | Fri Feb 06 00:00:00 1970 PST 537 | 407 | 00537_update7 | Sat Feb 07 00:00:00 1970 PST 538 | 8 | 00538 | Sun Feb 08 00:00:00 1970 PST - 539 | 509 | 00539_update9 | Mon Feb 09 00:00:00 1970 PST + 539 | 9 | 00539 | Mon Feb 09 00:00:00 1970 PST 540 | 0 | 00540 | Tue Feb 10 00:00:00 1970 PST 541 | 1 | 00541 | Wed Feb 11 00:00:00 1970 PST + 542 | 2 | 00542 | Thu Feb 12 00:00:00 1970 PST 543 | 303 | 00543_update3 | Fri Feb 13 00:00:00 1970 PST 544 | 4 | 00544 | Sat Feb 14 00:00:00 1970 PST 546 | 6 | 00546 | Mon Feb 16 00:00:00 1970 PST 547 | 407 | 00547_update7 | Tue Feb 17 00:00:00 1970 PST 548 | 8 | 00548 | Wed Feb 18 00:00:00 1970 PST - 549 | 509 | 00549_update9 | Thu Feb 19 00:00:00 1970 PST + 549 | 9 | 00549 | Thu Feb 19 00:00:00 1970 PST 550 | 0 | 00550 | Fri Feb 20 00:00:00 1970 PST 551 | 1 | 00551 | Sat Feb 21 00:00:00 1970 PST + 552 | 2 | 00552 | Sun Feb 22 00:00:00 1970 PST 553 | 303 | 00553_update3 | Mon Feb 23 00:00:00 1970 PST 554 | 4 | 00554 | Tue Feb 24 00:00:00 1970 PST 556 | 6 | 00556 | Thu Feb 26 00:00:00 1970 PST 557 | 407 | 00557_update7 | Fri Feb 27 00:00:00 1970 PST 558 | 8 | 00558 | Sat Feb 28 00:00:00 1970 PST - 559 | 509 | 00559_update9 | Sun Mar 01 00:00:00 1970 PST + 559 | 9 | 00559 | Sun Mar 01 00:00:00 1970 PST 560 | 0 | 00560 | Mon Mar 02 00:00:00 1970 PST 561 | 1 | 00561 | Tue Mar 03 00:00:00 1970 PST + 562 | 2 | 00562 | Wed Mar 04 00:00:00 1970 PST 563 | 303 | 00563_update3 | Thu Mar 05 00:00:00 1970 PST 564 | 4 | 00564 | Fri Mar 06 00:00:00 1970 PST 566 | 6 | 00566 | Sun Mar 08 00:00:00 1970 PST 567 | 407 | 00567_update7 | Mon Mar 09 00:00:00 1970 PST 568 | 8 | 00568 | Tue Mar 10 00:00:00 1970 PST - 569 | 509 | 00569_update9 | Wed Mar 11 00:00:00 1970 PST + 569 | 9 | 00569 | Wed Mar 11 00:00:00 1970 PST 570 | 0 | 00570 | Thu Mar 12 00:00:00 1970 PST 571 | 1 | 00571 | Fri Mar 13 00:00:00 1970 PST + 572 | 2 | 00572 | Sat Mar 14 00:00:00 1970 PST 573 | 303 | 00573_update3 | Sun Mar 15 00:00:00 1970 PST 574 | 4 | 00574 | Mon Mar 16 00:00:00 1970 PST 576 | 6 | 00576 | Wed Mar 18 00:00:00 1970 PST 577 | 407 | 00577_update7 | Thu Mar 19 00:00:00 1970 PST 578 | 8 | 00578 | Fri Mar 20 00:00:00 1970 PST - 579 | 509 | 00579_update9 | Sat Mar 21 00:00:00 1970 PST + 579 | 9 | 00579 | Sat Mar 21 00:00:00 1970 PST 580 | 0 | 00580 | Sun Mar 22 00:00:00 1970 PST 581 | 1 | 00581 | Mon Mar 23 00:00:00 1970 PST + 582 | 2 | 00582 | Tue Mar 24 00:00:00 1970 PST 583 | 303 | 00583_update3 | Wed Mar 25 00:00:00 1970 PST 584 | 4 | 00584 | Thu Mar 26 00:00:00 1970 PST 586 | 6 | 00586 | Sat Mar 28 00:00:00 1970 PST 587 | 407 | 00587_update7 | Sun Mar 29 00:00:00 1970 PST 588 | 8 | 00588 | Mon Mar 30 00:00:00 1970 PST - 589 | 509 | 00589_update9 | Tue Mar 31 00:00:00 1970 PST + 589 | 9 | 00589 | Tue Mar 31 00:00:00 1970 PST 590 | 0 | 00590 | Wed Apr 01 00:00:00 1970 PST 591 | 1 | 00591 | Thu Apr 02 00:00:00 1970 PST + 592 | 2 | 00592 | Fri Apr 03 00:00:00 1970 PST 593 | 303 | 00593_update3 | Sat Apr 04 00:00:00 1970 PST 594 | 4 | 00594 | Sun Apr 05 00:00:00 1970 PST 596 | 6 | 00596 | Tue Apr 07 00:00:00 1970 PST 597 | 407 | 00597_update7 | Wed Apr 08 00:00:00 1970 PST 598 | 8 | 00598 | Thu Apr 09 00:00:00 1970 PST - 599 | 509 | 00599_update9 | Fri Apr 10 00:00:00 1970 PST + 599 | 9 | 00599 | Fri Apr 10 00:00:00 1970 PST 600 | 0 | 00600 | Thu Jan 01 00:00:00 1970 PST 601 | 1 | 00601 | Fri Jan 02 00:00:00 1970 PST + 602 | 2 | 00602 | Sat Jan 03 00:00:00 1970 PST 603 | 303 | 00603_update3 | Sun Jan 04 00:00:00 1970 PST 604 | 4 | 00604 | Mon Jan 05 00:00:00 1970 PST 606 | 6 | 00606 | Wed Jan 07 00:00:00 1970 PST 607 | 407 | 00607_update7 | Thu Jan 08 00:00:00 1970 PST 608 | 8 | 00608 | Fri Jan 09 00:00:00 1970 PST - 609 | 509 | 00609_update9 | Sat Jan 10 00:00:00 1970 PST + 609 | 9 | 00609 | Sat Jan 10 00:00:00 1970 PST 610 | 0 | 00610 | Sun Jan 11 00:00:00 1970 PST 611 | 1 | 00611 | Mon Jan 12 00:00:00 1970 PST + 612 | 2 | 00612 | Tue Jan 13 00:00:00 1970 PST 613 | 303 | 00613_update3 | Wed Jan 14 00:00:00 1970 PST 614 | 4 | 00614 | Thu Jan 15 00:00:00 1970 PST 616 | 6 | 00616 | Sat Jan 17 00:00:00 1970 PST 617 | 407 | 00617_update7 | Sun Jan 18 00:00:00 1970 PST 618 | 8 | 00618 | Mon Jan 19 00:00:00 1970 PST - 619 | 509 | 00619_update9 | Tue Jan 20 00:00:00 1970 PST + 619 | 9 | 00619 | Tue Jan 20 00:00:00 1970 PST 620 | 0 | 00620 | Wed Jan 21 00:00:00 1970 PST 621 | 1 | 00621 | Thu Jan 22 00:00:00 1970 PST + 622 | 2 | 00622 | Fri Jan 23 00:00:00 1970 PST 623 | 303 | 00623_update3 | Sat Jan 24 00:00:00 1970 PST 624 | 4 | 00624 | Sun Jan 25 00:00:00 1970 PST 626 | 6 | 00626 | Tue Jan 27 00:00:00 1970 PST 627 | 407 | 00627_update7 | Wed Jan 28 00:00:00 1970 PST 628 | 8 | 00628 | Thu Jan 29 00:00:00 1970 PST - 629 | 509 | 00629_update9 | Fri Jan 30 00:00:00 1970 PST + 629 | 9 | 00629 | Fri Jan 30 00:00:00 1970 PST 630 | 0 | 00630 | Sat Jan 31 00:00:00 1970 PST 631 | 1 | 00631 | Sun Feb 01 00:00:00 1970 PST + 632 | 2 | 00632 | Mon Feb 02 00:00:00 1970 PST 633 | 303 | 00633_update3 | Tue Feb 03 00:00:00 1970 PST 634 | 4 | 00634 | Wed Feb 04 00:00:00 1970 PST 636 | 6 | 00636 | Fri Feb 06 00:00:00 1970 PST 637 | 407 | 00637_update7 | Sat Feb 07 00:00:00 1970 PST 638 | 8 | 00638 | Sun Feb 08 00:00:00 1970 PST - 639 | 509 | 00639_update9 | Mon Feb 09 00:00:00 1970 PST + 639 | 9 | 00639 | Mon Feb 09 00:00:00 1970 PST 640 | 0 | 00640 | Tue Feb 10 00:00:00 1970 PST 641 | 1 | 00641 | Wed Feb 11 00:00:00 1970 PST + 642 | 2 | 00642 | Thu Feb 12 00:00:00 1970 PST 643 | 303 | 00643_update3 | Fri Feb 13 00:00:00 1970 PST 644 | 4 | 00644 | Sat Feb 14 00:00:00 1970 PST 646 | 6 | 00646 | Mon Feb 16 00:00:00 1970 PST 647 | 407 | 00647_update7 | Tue Feb 17 00:00:00 1970 PST 648 | 8 | 00648 | Wed Feb 18 00:00:00 1970 PST - 649 | 509 | 00649_update9 | Thu Feb 19 00:00:00 1970 PST + 649 | 9 | 00649 | Thu Feb 19 00:00:00 1970 PST 650 | 0 | 00650 | Fri Feb 20 00:00:00 1970 PST 651 | 1 | 00651 | Sat Feb 21 00:00:00 1970 PST + 652 | 2 | 00652 | Sun Feb 22 00:00:00 1970 PST 653 | 303 | 00653_update3 | Mon Feb 23 00:00:00 1970 PST 654 | 4 | 00654 | Tue Feb 24 00:00:00 1970 PST 656 | 6 | 00656 | Thu Feb 26 00:00:00 1970 PST 657 | 407 | 00657_update7 | Fri Feb 27 00:00:00 1970 PST 658 | 8 | 00658 | Sat Feb 28 00:00:00 1970 PST - 659 | 509 | 00659_update9 | Sun Mar 01 00:00:00 1970 PST + 659 | 9 | 00659 | Sun Mar 01 00:00:00 1970 PST 660 | 0 | 00660 | Mon Mar 02 00:00:00 1970 PST 661 | 1 | 00661 | Tue Mar 03 00:00:00 1970 PST + 662 | 2 | 00662 | Wed Mar 04 00:00:00 1970 PST 663 | 303 | 00663_update3 | Thu Mar 05 00:00:00 1970 PST 664 | 4 | 00664 | Fri Mar 06 00:00:00 1970 PST 666 | 6 | 00666 | Sun Mar 08 00:00:00 1970 PST 667 | 407 | 00667_update7 | Mon Mar 09 00:00:00 1970 PST 668 | 8 | 00668 | Tue Mar 10 00:00:00 1970 PST - 669 | 509 | 00669_update9 | Wed Mar 11 00:00:00 1970 PST + 669 | 9 | 00669 | Wed Mar 11 00:00:00 1970 PST 670 | 0 | 00670 | Thu Mar 12 00:00:00 1970 PST 671 | 1 | 00671 | Fri Mar 13 00:00:00 1970 PST + 672 | 2 | 00672 | Sat Mar 14 00:00:00 1970 PST 673 | 303 | 00673_update3 | Sun Mar 15 00:00:00 1970 PST 674 | 4 | 00674 | Mon Mar 16 00:00:00 1970 PST 676 | 6 | 00676 | Wed Mar 18 00:00:00 1970 PST 677 | 407 | 00677_update7 | Thu Mar 19 00:00:00 1970 PST 678 | 8 | 00678 | Fri Mar 20 00:00:00 1970 PST - 679 | 509 | 00679_update9 | Sat Mar 21 00:00:00 1970 PST + 679 | 9 | 00679 | Sat Mar 21 00:00:00 1970 PST 680 | 0 | 00680 | Sun Mar 22 00:00:00 1970 PST 681 | 1 | 00681 | Mon Mar 23 00:00:00 1970 PST + 682 | 2 | 00682 | Tue Mar 24 00:00:00 1970 PST 683 | 303 | 00683_update3 | Wed Mar 25 00:00:00 1970 PST 684 | 4 | 00684 | Thu Mar 26 00:00:00 1970 PST 686 | 6 | 00686 | Sat Mar 28 00:00:00 1970 PST 687 | 407 | 00687_update7 | Sun Mar 29 00:00:00 1970 PST 688 | 8 | 00688 | Mon Mar 30 00:00:00 1970 PST - 689 | 509 | 00689_update9 | Tue Mar 31 00:00:00 1970 PST + 689 | 9 | 00689 | Tue Mar 31 00:00:00 1970 PST 690 | 0 | 00690 | Wed Apr 01 00:00:00 1970 PST 691 | 1 | 00691 | Thu Apr 02 00:00:00 1970 PST + 692 | 2 | 00692 | Fri Apr 03 00:00:00 1970 PST 693 | 303 | 00693_update3 | Sat Apr 04 00:00:00 1970 PST 694 | 4 | 00694 | Sun Apr 05 00:00:00 1970 PST 696 | 6 | 00696 | Tue Apr 07 00:00:00 1970 PST 697 | 407 | 00697_update7 | Wed Apr 08 00:00:00 1970 PST 698 | 8 | 00698 | Thu Apr 09 00:00:00 1970 PST - 699 | 509 | 00699_update9 | Fri Apr 10 00:00:00 1970 PST + 699 | 9 | 00699 | Fri Apr 10 00:00:00 1970 PST 700 | 0 | 00700 | Thu Jan 01 00:00:00 1970 PST 701 | 1 | 00701 | Fri Jan 02 00:00:00 1970 PST + 702 | 2 | 00702 | Sat Jan 03 00:00:00 1970 PST 703 | 303 | 00703_update3 | Sun Jan 04 00:00:00 1970 PST 704 | 4 | 00704 | Mon Jan 05 00:00:00 1970 PST 706 | 6 | 00706 | Wed Jan 07 00:00:00 1970 PST 707 | 407 | 00707_update7 | Thu Jan 08 00:00:00 1970 PST 708 | 8 | 00708 | Fri Jan 09 00:00:00 1970 PST - 709 | 509 | 00709_update9 | Sat Jan 10 00:00:00 1970 PST + 709 | 9 | 00709 | Sat Jan 10 00:00:00 1970 PST 710 | 0 | 00710 | Sun Jan 11 00:00:00 1970 PST 711 | 1 | 00711 | Mon Jan 12 00:00:00 1970 PST + 712 | 2 | 00712 | Tue Jan 13 00:00:00 1970 PST 713 | 303 | 00713_update3 | Wed Jan 14 00:00:00 1970 PST 714 | 4 | 00714 | Thu Jan 15 00:00:00 1970 PST 716 | 6 | 00716 | Sat Jan 17 00:00:00 1970 PST 717 | 407 | 00717_update7 | Sun Jan 18 00:00:00 1970 PST 718 | 8 | 00718 | Mon Jan 19 00:00:00 1970 PST - 719 | 509 | 00719_update9 | Tue Jan 20 00:00:00 1970 PST + 719 | 9 | 00719 | Tue Jan 20 00:00:00 1970 PST 720 | 0 | 00720 | Wed Jan 21 00:00:00 1970 PST 721 | 1 | 00721 | Thu Jan 22 00:00:00 1970 PST + 722 | 2 | 00722 | Fri Jan 23 00:00:00 1970 PST 723 | 303 | 00723_update3 | Sat Jan 24 00:00:00 1970 PST 724 | 4 | 00724 | Sun Jan 25 00:00:00 1970 PST 726 | 6 | 00726 | Tue Jan 27 00:00:00 1970 PST 727 | 407 | 00727_update7 | Wed Jan 28 00:00:00 1970 PST 728 | 8 | 00728 | Thu Jan 29 00:00:00 1970 PST - 729 | 509 | 00729_update9 | Fri Jan 30 00:00:00 1970 PST + 729 | 9 | 00729 | Fri Jan 30 00:00:00 1970 PST 730 | 0 | 00730 | Sat Jan 31 00:00:00 1970 PST 731 | 1 | 00731 | Sun Feb 01 00:00:00 1970 PST + 732 | 2 | 00732 | Mon Feb 02 00:00:00 1970 PST 733 | 303 | 00733_update3 | Tue Feb 03 00:00:00 1970 PST 734 | 4 | 00734 | Wed Feb 04 00:00:00 1970 PST 736 | 6 | 00736 | Fri Feb 06 00:00:00 1970 PST 737 | 407 | 00737_update7 | Sat Feb 07 00:00:00 1970 PST 738 | 8 | 00738 | Sun Feb 08 00:00:00 1970 PST - 739 | 509 | 00739_update9 | Mon Feb 09 00:00:00 1970 PST + 739 | 9 | 00739 | Mon Feb 09 00:00:00 1970 PST 740 | 0 | 00740 | Tue Feb 10 00:00:00 1970 PST 741 | 1 | 00741 | Wed Feb 11 00:00:00 1970 PST + 742 | 2 | 00742 | Thu Feb 12 00:00:00 1970 PST 743 | 303 | 00743_update3 | Fri Feb 13 00:00:00 1970 PST 744 | 4 | 00744 | Sat Feb 14 00:00:00 1970 PST 746 | 6 | 00746 | Mon Feb 16 00:00:00 1970 PST 747 | 407 | 00747_update7 | Tue Feb 17 00:00:00 1970 PST 748 | 8 | 00748 | Wed Feb 18 00:00:00 1970 PST - 749 | 509 | 00749_update9 | Thu Feb 19 00:00:00 1970 PST + 749 | 9 | 00749 | Thu Feb 19 00:00:00 1970 PST 750 | 0 | 00750 | Fri Feb 20 00:00:00 1970 PST 751 | 1 | 00751 | Sat Feb 21 00:00:00 1970 PST + 752 | 2 | 00752 | Sun Feb 22 00:00:00 1970 PST 753 | 303 | 00753_update3 | Mon Feb 23 00:00:00 1970 PST 754 | 4 | 00754 | Tue Feb 24 00:00:00 1970 PST 756 | 6 | 00756 | Thu Feb 26 00:00:00 1970 PST 757 | 407 | 00757_update7 | Fri Feb 27 00:00:00 1970 PST 758 | 8 | 00758 | Sat Feb 28 00:00:00 1970 PST - 759 | 509 | 00759_update9 | Sun Mar 01 00:00:00 1970 PST + 759 | 9 | 00759 | Sun Mar 01 00:00:00 1970 PST 760 | 0 | 00760 | Mon Mar 02 00:00:00 1970 PST 761 | 1 | 00761 | Tue Mar 03 00:00:00 1970 PST + 762 | 2 | 00762 | Wed Mar 04 00:00:00 1970 PST 763 | 303 | 00763_update3 | Thu Mar 05 00:00:00 1970 PST 764 | 4 | 00764 | Fri Mar 06 00:00:00 1970 PST 766 | 6 | 00766 | Sun Mar 08 00:00:00 1970 PST 767 | 407 | 00767_update7 | Mon Mar 09 00:00:00 1970 PST 768 | 8 | 00768 | Tue Mar 10 00:00:00 1970 PST - 769 | 509 | 00769_update9 | Wed Mar 11 00:00:00 1970 PST + 769 | 9 | 00769 | Wed Mar 11 00:00:00 1970 PST 770 | 0 | 00770 | Thu Mar 12 00:00:00 1970 PST 771 | 1 | 00771 | Fri Mar 13 00:00:00 1970 PST + 772 | 2 | 00772 | Sat Mar 14 00:00:00 1970 PST 773 | 303 | 00773_update3 | Sun Mar 15 00:00:00 1970 PST 774 | 4 | 00774 | Mon Mar 16 00:00:00 1970 PST 776 | 6 | 00776 | Wed Mar 18 00:00:00 1970 PST 777 | 407 | 00777_update7 | Thu Mar 19 00:00:00 1970 PST 778 | 8 | 00778 | Fri Mar 20 00:00:00 1970 PST - 779 | 509 | 00779_update9 | Sat Mar 21 00:00:00 1970 PST + 779 | 9 | 00779 | Sat Mar 21 00:00:00 1970 PST 780 | 0 | 00780 | Sun Mar 22 00:00:00 1970 PST 781 | 1 | 00781 | Mon Mar 23 00:00:00 1970 PST + 782 | 2 | 00782 | Tue Mar 24 00:00:00 1970 PST 783 | 303 | 00783_update3 | Wed Mar 25 00:00:00 1970 PST 784 | 4 | 00784 | Thu Mar 26 00:00:00 1970 PST 786 | 6 | 00786 | Sat Mar 28 00:00:00 1970 PST 787 | 407 | 00787_update7 | Sun Mar 29 00:00:00 1970 PST 788 | 8 | 00788 | Mon Mar 30 00:00:00 1970 PST - 789 | 509 | 00789_update9 | Tue Mar 31 00:00:00 1970 PST + 789 | 9 | 00789 | Tue Mar 31 00:00:00 1970 PST 790 | 0 | 00790 | Wed Apr 01 00:00:00 1970 PST 791 | 1 | 00791 | Thu Apr 02 00:00:00 1970 PST + 792 | 2 | 00792 | Fri Apr 03 00:00:00 1970 PST 793 | 303 | 00793_update3 | Sat Apr 04 00:00:00 1970 PST 794 | 4 | 00794 | Sun Apr 05 00:00:00 1970 PST 796 | 6 | 00796 | Tue Apr 07 00:00:00 1970 PST 797 | 407 | 00797_update7 | Wed Apr 08 00:00:00 1970 PST 798 | 8 | 00798 | Thu Apr 09 00:00:00 1970 PST - 799 | 509 | 00799_update9 | Fri Apr 10 00:00:00 1970 PST + 799 | 9 | 00799 | Fri Apr 10 00:00:00 1970 PST 800 | 0 | 00800 | Thu Jan 01 00:00:00 1970 PST 801 | 1 | 00801 | Fri Jan 02 00:00:00 1970 PST + 802 | 2 | 00802 | Sat Jan 03 00:00:00 1970 PST 803 | 303 | 00803_update3 | Sun Jan 04 00:00:00 1970 PST 804 | 4 | 00804 | Mon Jan 05 00:00:00 1970 PST 806 | 6 | 00806 | Wed Jan 07 00:00:00 1970 PST 807 | 407 | 00807_update7 | Thu Jan 08 00:00:00 1970 PST 808 | 8 | 00808 | Fri Jan 09 00:00:00 1970 PST - 809 | 509 | 00809_update9 | Sat Jan 10 00:00:00 1970 PST + 809 | 9 | 00809 | Sat Jan 10 00:00:00 1970 PST 810 | 0 | 00810 | Sun Jan 11 00:00:00 1970 PST 811 | 1 | 00811 | Mon Jan 12 00:00:00 1970 PST + 812 | 2 | 00812 | Tue Jan 13 00:00:00 1970 PST 813 | 303 | 00813_update3 | Wed Jan 14 00:00:00 1970 PST 814 | 4 | 00814 | Thu Jan 15 00:00:00 1970 PST 816 | 6 | 00816 | Sat Jan 17 00:00:00 1970 PST 817 | 407 | 00817_update7 | Sun Jan 18 00:00:00 1970 PST 818 | 8 | 00818 | Mon Jan 19 00:00:00 1970 PST - 819 | 509 | 00819_update9 | Tue Jan 20 00:00:00 1970 PST + 819 | 9 | 00819 | Tue Jan 20 00:00:00 1970 PST 820 | 0 | 00820 | Wed Jan 21 00:00:00 1970 PST 821 | 1 | 00821 | Thu Jan 22 00:00:00 1970 PST + 822 | 2 | 00822 | Fri Jan 23 00:00:00 1970 PST 823 | 303 | 00823_update3 | Sat Jan 24 00:00:00 1970 PST 824 | 4 | 00824 | Sun Jan 25 00:00:00 1970 PST 826 | 6 | 00826 | Tue Jan 27 00:00:00 1970 PST 827 | 407 | 00827_update7 | Wed Jan 28 00:00:00 1970 PST 828 | 8 | 00828 | Thu Jan 29 00:00:00 1970 PST - 829 | 509 | 00829_update9 | Fri Jan 30 00:00:00 1970 PST + 829 | 9 | 00829 | Fri Jan 30 00:00:00 1970 PST 830 | 0 | 00830 | Sat Jan 31 00:00:00 1970 PST 831 | 1 | 00831 | Sun Feb 01 00:00:00 1970 PST + 832 | 2 | 00832 | Mon Feb 02 00:00:00 1970 PST 833 | 303 | 00833_update3 | Tue Feb 03 00:00:00 1970 PST 834 | 4 | 00834 | Wed Feb 04 00:00:00 1970 PST 836 | 6 | 00836 | Fri Feb 06 00:00:00 1970 PST 837 | 407 | 00837_update7 | Sat Feb 07 00:00:00 1970 PST 838 | 8 | 00838 | Sun Feb 08 00:00:00 1970 PST - 839 | 509 | 00839_update9 | Mon Feb 09 00:00:00 1970 PST + 839 | 9 | 00839 | Mon Feb 09 00:00:00 1970 PST 840 | 0 | 00840 | Tue Feb 10 00:00:00 1970 PST 841 | 1 | 00841 | Wed Feb 11 00:00:00 1970 PST + 842 | 2 | 00842 | Thu Feb 12 00:00:00 1970 PST 843 | 303 | 00843_update3 | Fri Feb 13 00:00:00 1970 PST 844 | 4 | 00844 | Sat Feb 14 00:00:00 1970 PST 846 | 6 | 00846 | Mon Feb 16 00:00:00 1970 PST 847 | 407 | 00847_update7 | Tue Feb 17 00:00:00 1970 PST 848 | 8 | 00848 | Wed Feb 18 00:00:00 1970 PST - 849 | 509 | 00849_update9 | Thu Feb 19 00:00:00 1970 PST + 849 | 9 | 00849 | Thu Feb 19 00:00:00 1970 PST 850 | 0 | 00850 | Fri Feb 20 00:00:00 1970 PST 851 | 1 | 00851 | Sat Feb 21 00:00:00 1970 PST + 852 | 2 | 00852 | Sun Feb 22 00:00:00 1970 PST 853 | 303 | 00853_update3 | Mon Feb 23 00:00:00 1970 PST 854 | 4 | 00854 | Tue Feb 24 00:00:00 1970 PST 856 | 6 | 00856 | Thu Feb 26 00:00:00 1970 PST 857 | 407 | 00857_update7 | Fri Feb 27 00:00:00 1970 PST 858 | 8 | 00858 | Sat Feb 28 00:00:00 1970 PST - 859 | 509 | 00859_update9 | Sun Mar 01 00:00:00 1970 PST + 859 | 9 | 00859 | Sun Mar 01 00:00:00 1970 PST 860 | 0 | 00860 | Mon Mar 02 00:00:00 1970 PST 861 | 1 | 00861 | Tue Mar 03 00:00:00 1970 PST + 862 | 2 | 00862 | Wed Mar 04 00:00:00 1970 PST 863 | 303 | 00863_update3 | Thu Mar 05 00:00:00 1970 PST 864 | 4 | 00864 | Fri Mar 06 00:00:00 1970 PST 866 | 6 | 00866 | Sun Mar 08 00:00:00 1970 PST 867 | 407 | 00867_update7 | Mon Mar 09 00:00:00 1970 PST 868 | 8 | 00868 | Tue Mar 10 00:00:00 1970 PST - 869 | 509 | 00869_update9 | Wed Mar 11 00:00:00 1970 PST + 869 | 9 | 00869 | Wed Mar 11 00:00:00 1970 PST 870 | 0 | 00870 | Thu Mar 12 00:00:00 1970 PST 871 | 1 | 00871 | Fri Mar 13 00:00:00 1970 PST + 872 | 2 | 00872 | Sat Mar 14 00:00:00 1970 PST 873 | 303 | 00873_update3 | Sun Mar 15 00:00:00 1970 PST 874 | 4 | 00874 | Mon Mar 16 00:00:00 1970 PST 876 | 6 | 00876 | Wed Mar 18 00:00:00 1970 PST 877 | 407 | 00877_update7 | Thu Mar 19 00:00:00 1970 PST 878 | 8 | 00878 | Fri Mar 20 00:00:00 1970 PST - 879 | 509 | 00879_update9 | Sat Mar 21 00:00:00 1970 PST + 879 | 9 | 00879 | Sat Mar 21 00:00:00 1970 PST 880 | 0 | 00880 | Sun Mar 22 00:00:00 1970 PST 881 | 1 | 00881 | Mon Mar 23 00:00:00 1970 PST + 882 | 2 | 00882 | Tue Mar 24 00:00:00 1970 PST 883 | 303 | 00883_update3 | Wed Mar 25 00:00:00 1970 PST 884 | 4 | 00884 | Thu Mar 26 00:00:00 1970 PST 886 | 6 | 00886 | Sat Mar 28 00:00:00 1970 PST 887 | 407 | 00887_update7 | Sun Mar 29 00:00:00 1970 PST 888 | 8 | 00888 | Mon Mar 30 00:00:00 1970 PST - 889 | 509 | 00889_update9 | Tue Mar 31 00:00:00 1970 PST + 889 | 9 | 00889 | Tue Mar 31 00:00:00 1970 PST 890 | 0 | 00890 | Wed Apr 01 00:00:00 1970 PST 891 | 1 | 00891 | Thu Apr 02 00:00:00 1970 PST + 892 | 2 | 00892 | Fri Apr 03 00:00:00 1970 PST 893 | 303 | 00893_update3 | Sat Apr 04 00:00:00 1970 PST 894 | 4 | 00894 | Sun Apr 05 00:00:00 1970 PST 896 | 6 | 00896 | Tue Apr 07 00:00:00 1970 PST 897 | 407 | 00897_update7 | Wed Apr 08 00:00:00 1970 PST 898 | 8 | 00898 | Thu Apr 09 00:00:00 1970 PST - 899 | 509 | 00899_update9 | Fri Apr 10 00:00:00 1970 PST + 899 | 9 | 00899 | Fri Apr 10 00:00:00 1970 PST 900 | 0 | 00900 | Thu Jan 01 00:00:00 1970 PST 901 | 1 | 00901 | Fri Jan 02 00:00:00 1970 PST + 902 | 2 | 00902 | Sat Jan 03 00:00:00 1970 PST 903 | 303 | 00903_update3 | Sun Jan 04 00:00:00 1970 PST 904 | 4 | 00904 | Mon Jan 05 00:00:00 1970 PST 906 | 6 | 00906 | Wed Jan 07 00:00:00 1970 PST 907 | 407 | 00907_update7 | Thu Jan 08 00:00:00 1970 PST 908 | 8 | 00908 | Fri Jan 09 00:00:00 1970 PST - 909 | 509 | 00909_update9 | Sat Jan 10 00:00:00 1970 PST + 909 | 9 | 00909 | Sat Jan 10 00:00:00 1970 PST 910 | 0 | 00910 | Sun Jan 11 00:00:00 1970 PST 911 | 1 | 00911 | Mon Jan 12 00:00:00 1970 PST + 912 | 2 | 00912 | Tue Jan 13 00:00:00 1970 PST 913 | 303 | 00913_update3 | Wed Jan 14 00:00:00 1970 PST 914 | 4 | 00914 | Thu Jan 15 00:00:00 1970 PST 916 | 6 | 00916 | Sat Jan 17 00:00:00 1970 PST 917 | 407 | 00917_update7 | Sun Jan 18 00:00:00 1970 PST 918 | 8 | 00918 | Mon Jan 19 00:00:00 1970 PST - 919 | 509 | 00919_update9 | Tue Jan 20 00:00:00 1970 PST + 919 | 9 | 00919 | Tue Jan 20 00:00:00 1970 PST 920 | 0 | 00920 | Wed Jan 21 00:00:00 1970 PST 921 | 1 | 00921 | Thu Jan 22 00:00:00 1970 PST + 922 | 2 | 00922 | Fri Jan 23 00:00:00 1970 PST 923 | 303 | 00923_update3 | Sat Jan 24 00:00:00 1970 PST 924 | 4 | 00924 | Sun Jan 25 00:00:00 1970 PST 926 | 6 | 00926 | Tue Jan 27 00:00:00 1970 PST 927 | 407 | 00927_update7 | Wed Jan 28 00:00:00 1970 PST 928 | 8 | 00928 | Thu Jan 29 00:00:00 1970 PST - 929 | 509 | 00929_update9 | Fri Jan 30 00:00:00 1970 PST + 929 | 9 | 00929 | Fri Jan 30 00:00:00 1970 PST 930 | 0 | 00930 | Sat Jan 31 00:00:00 1970 PST 931 | 1 | 00931 | Sun Feb 01 00:00:00 1970 PST + 932 | 2 | 00932 | Mon Feb 02 00:00:00 1970 PST 933 | 303 | 00933_update3 | Tue Feb 03 00:00:00 1970 PST 934 | 4 | 00934 | Wed Feb 04 00:00:00 1970 PST 936 | 6 | 00936 | Fri Feb 06 00:00:00 1970 PST 937 | 407 | 00937_update7 | Sat Feb 07 00:00:00 1970 PST 938 | 8 | 00938 | Sun Feb 08 00:00:00 1970 PST - 939 | 509 | 00939_update9 | Mon Feb 09 00:00:00 1970 PST + 939 | 9 | 00939 | Mon Feb 09 00:00:00 1970 PST 940 | 0 | 00940 | Tue Feb 10 00:00:00 1970 PST 941 | 1 | 00941 | Wed Feb 11 00:00:00 1970 PST + 942 | 2 | 00942 | Thu Feb 12 00:00:00 1970 PST 943 | 303 | 00943_update3 | Fri Feb 13 00:00:00 1970 PST 944 | 4 | 00944 | Sat Feb 14 00:00:00 1970 PST 946 | 6 | 00946 | Mon Feb 16 00:00:00 1970 PST 947 | 407 | 00947_update7 | Tue Feb 17 00:00:00 1970 PST 948 | 8 | 00948 | Wed Feb 18 00:00:00 1970 PST - 949 | 509 | 00949_update9 | Thu Feb 19 00:00:00 1970 PST + 949 | 9 | 00949 | Thu Feb 19 00:00:00 1970 PST 950 | 0 | 00950 | Fri Feb 20 00:00:00 1970 PST 951 | 1 | 00951 | Sat Feb 21 00:00:00 1970 PST + 952 | 2 | 00952 | Sun Feb 22 00:00:00 1970 PST 953 | 303 | 00953_update3 | Mon Feb 23 00:00:00 1970 PST 954 | 4 | 00954 | Tue Feb 24 00:00:00 1970 PST 956 | 6 | 00956 | Thu Feb 26 00:00:00 1970 PST 957 | 407 | 00957_update7 | Fri Feb 27 00:00:00 1970 PST 958 | 8 | 00958 | Sat Feb 28 00:00:00 1970 PST - 959 | 509 | 00959_update9 | Sun Mar 01 00:00:00 1970 PST + 959 | 9 | 00959 | Sun Mar 01 00:00:00 1970 PST 960 | 0 | 00960 | Mon Mar 02 00:00:00 1970 PST 961 | 1 | 00961 | Tue Mar 03 00:00:00 1970 PST + 962 | 2 | 00962 | Wed Mar 04 00:00:00 1970 PST 963 | 303 | 00963_update3 | Thu Mar 05 00:00:00 1970 PST 964 | 4 | 00964 | Fri Mar 06 00:00:00 1970 PST 966 | 6 | 00966 | Sun Mar 08 00:00:00 1970 PST 967 | 407 | 00967_update7 | Mon Mar 09 00:00:00 1970 PST 968 | 8 | 00968 | Tue Mar 10 00:00:00 1970 PST - 969 | 509 | 00969_update9 | Wed Mar 11 00:00:00 1970 PST + 969 | 9 | 00969 | Wed Mar 11 00:00:00 1970 PST 970 | 0 | 00970 | Thu Mar 12 00:00:00 1970 PST 971 | 1 | 00971 | Fri Mar 13 00:00:00 1970 PST + 972 | 2 | 00972 | Sat Mar 14 00:00:00 1970 PST 973 | 303 | 00973_update3 | Sun Mar 15 00:00:00 1970 PST 974 | 4 | 00974 | Mon Mar 16 00:00:00 1970 PST 976 | 6 | 00976 | Wed Mar 18 00:00:00 1970 PST 977 | 407 | 00977_update7 | Thu Mar 19 00:00:00 1970 PST 978 | 8 | 00978 | Fri Mar 20 00:00:00 1970 PST - 979 | 509 | 00979_update9 | Sat Mar 21 00:00:00 1970 PST + 979 | 9 | 00979 | Sat Mar 21 00:00:00 1970 PST 980 | 0 | 00980 | Sun Mar 22 00:00:00 1970 PST 981 | 1 | 00981 | Mon Mar 23 00:00:00 1970 PST + 982 | 2 | 00982 | Tue Mar 24 00:00:00 1970 PST 983 | 303 | 00983_update3 | Wed Mar 25 00:00:00 1970 PST 984 | 4 | 00984 | Thu Mar 26 00:00:00 1970 PST 986 | 6 | 00986 | Sat Mar 28 00:00:00 1970 PST 987 | 407 | 00987_update7 | Sun Mar 29 00:00:00 1970 PST 988 | 8 | 00988 | Mon Mar 30 00:00:00 1970 PST - 989 | 509 | 00989_update9 | Tue Mar 31 00:00:00 1970 PST + 989 | 9 | 00989 | Tue Mar 31 00:00:00 1970 PST 990 | 0 | 00990 | Wed Apr 01 00:00:00 1970 PST 991 | 1 | 00991 | Thu Apr 02 00:00:00 1970 PST + 992 | 2 | 00992 | Fri Apr 03 00:00:00 1970 PST 993 | 303 | 00993_update3 | Sat Apr 04 00:00:00 1970 PST 994 | 4 | 00994 | Sun Apr 05 00:00:00 1970 PST 996 | 6 | 00996 | Tue Apr 07 00:00:00 1970 PST 997 | 407 | 00997_update7 | Wed Apr 08 00:00:00 1970 PST 998 | 8 | 00998 | Thu Apr 09 00:00:00 1970 PST - 999 | 509 | 00999_update9 | Fri Apr 10 00:00:00 1970 PST + 999 | 9 | 00999 | Fri Apr 10 00:00:00 1970 PST 1000 | 0 | 01000 | Thu Jan 01 00:00:00 1970 PST 1001 | 101 | 0000100001 | + 1002 | 102 | 0000200002 | 1003 | 403 | 0000300003_update3 | 1004 | 104 | 0000400004 | 1006 | 106 | 0000600006 | 1007 | 507 | 0000700007_update7 | 1008 | 108 | 0000800008 | - 1009 | 609 | 0000900009_update9 | + 1009 | 109 | 0000900009 | 1010 | 100 | 0001000010 | 1011 | 101 | 0001100011 | + 1012 | 102 | 0001200012 | 1013 | 403 | 0001300013_update3 | 1014 | 104 | 0001400014 | 1016 | 106 | 0001600016 | 1017 | 507 | 0001700017_update7 | 1018 | 108 | 0001800018 | - 1019 | 609 | 0001900019_update9 | + 1019 | 109 | 0001900019 | 1020 | 100 | 0002000020 | 1101 | 201 | aaa | + 1102 | 202 | bbb | 1103 | 503 | ccc_update3 | 1104 | 204 | ddd | -(819 rows) +(922 rows) EXPLAIN (verbose, costs off) INSERT INTO ft2 (c1,c2,c3) VALUES (1200,999,'foo') RETURNING tableoid::regclass; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Insert on public.ft2 @@ -6049,6 +6328,7 @@ (6 rows) INSERT INTO ft2 (c1,c2,c3) VALUES (1200,999,'foo') RETURNING tableoid::regclass; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree tableoid ---------- ft2 @@ -6056,6 +6336,7 @@ EXPLAIN (verbose, costs off) UPDATE ft2 SET c3 = 'bar' WHERE c1 = 1200 RETURNING tableoid::regclass; -- can be pushed down +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------ Update on public.ft2 @@ -6065,6 +6346,7 @@ (4 rows) UPDATE ft2 SET c3 = 'bar' WHERE c1 = 1200 RETURNING tableoid::regclass; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree tableoid ---------- ft2 @@ -6072,6 +6354,7 @@ EXPLAIN (verbose, costs off) DELETE FROM ft2 WHERE c1 = 1200 RETURNING tableoid::regclass; -- can be pushed down +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN -------------------------------------------------------------------- Delete on public.ft2 @@ -6081,6 +6364,7 @@ (4 rows) DELETE FROM ft2 WHERE c1 = 1200 RETURNING tableoid::regclass; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree tableoid ---------- ft2 @@ -6089,75 +6373,35 @@ -- Test UPDATE/DELETE with RETURNING on a three-table join INSERT INTO ft2 (c1,c2,c3) SELECT id, id - 1200, to_char(id, 'FM00000') FROM generate_series(1201, 1300) id; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree EXPLAIN (verbose, costs off) UPDATE ft2 SET c3 = 'foo' FROM ft4 INNER JOIN ft5 ON (ft4.c1 = ft5.c1) WHERE ft2.c1 > 1200 AND ft2.c2 = ft4.c1 RETURNING ft2, ft2.*, ft4, ft4.*; -- can be pushed down - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Update on public.ft2 - Output: ft2.*, ft2.c1, ft2.c2, ft2.c3, ft2.c4, ft2.c5, ft2.c6, ft2.c7, ft2.c8, ft4.*, ft4.c1, ft4.c2, ft4.c3 - -> Foreign Update - Remote SQL: UPDATE "S 1"."T 1" r1 SET c3 = 'foo'::text FROM ("S 1"."T 3" r2 INNER JOIN "S 1"."T 4" r3 ON (TRUE)) WHERE ((r2.c1 = r3.c1)) AND ((r1.c2 = r2.c1)) AND ((r1."C 1" > 1200)) RETURNING r1."C 1", r1.c2, r1.c3, r1.c4, r1.c5, r1.c6, r1.c7, r1.c8, CASE WHEN (r2.*)::text IS NOT NULL THEN ROW(r2.c1, r2.c2, r2.c3) END, r2.c1, r2.c2, r2.c3 -(4 rows) - +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +ERROR: could not find junk ctid1 column UPDATE ft2 SET c3 = 'foo' FROM ft4 INNER JOIN ft5 ON (ft4.c1 = ft5.c1) WHERE ft2.c1 > 1200 AND ft2.c2 = ft4.c1 RETURNING ft2, ft2.*, ft4, ft4.*; - ft2 | c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 | ft4 | c1 | c2 | c3 ---------------------------------+------+----+-----+----+----+----+------------+----+----------------+----+----+-------- - (1206,6,foo,,,,"ft2 ",) | 1206 | 6 | foo | | | | ft2 | | (6,7,AAA006) | 6 | 7 | AAA006 - (1212,12,foo,,,,"ft2 ",) | 1212 | 12 | foo | | | | ft2 | | (12,13,AAA012) | 12 | 13 | AAA012 - (1218,18,foo,,,,"ft2 ",) | 1218 | 18 | foo | | | | ft2 | | (18,19,AAA018) | 18 | 19 | AAA018 - (1224,24,foo,,,,"ft2 ",) | 1224 | 24 | foo | | | | ft2 | | (24,25,AAA024) | 24 | 25 | AAA024 - (1230,30,foo,,,,"ft2 ",) | 1230 | 30 | foo | | | | ft2 | | (30,31,AAA030) | 30 | 31 | AAA030 - (1236,36,foo,,,,"ft2 ",) | 1236 | 36 | foo | | | | ft2 | | (36,37,AAA036) | 36 | 37 | AAA036 - (1242,42,foo,,,,"ft2 ",) | 1242 | 42 | foo | | | | ft2 | | (42,43,AAA042) | 42 | 43 | AAA042 - (1248,48,foo,,,,"ft2 ",) | 1248 | 48 | foo | | | | ft2 | | (48,49,AAA048) | 48 | 49 | AAA048 - (1254,54,foo,,,,"ft2 ",) | 1254 | 54 | foo | | | | ft2 | | (54,55,AAA054) | 54 | 55 | AAA054 - (1260,60,foo,,,,"ft2 ",) | 1260 | 60 | foo | | | | ft2 | | (60,61,AAA060) | 60 | 61 | AAA060 - (1266,66,foo,,,,"ft2 ",) | 1266 | 66 | foo | | | | ft2 | | (66,67,AAA066) | 66 | 67 | AAA066 - (1272,72,foo,,,,"ft2 ",) | 1272 | 72 | foo | | | | ft2 | | (72,73,AAA072) | 72 | 73 | AAA072 - (1278,78,foo,,,,"ft2 ",) | 1278 | 78 | foo | | | | ft2 | | (78,79,AAA078) | 78 | 79 | AAA078 - (1284,84,foo,,,,"ft2 ",) | 1284 | 84 | foo | | | | ft2 | | (84,85,AAA084) | 84 | 85 | AAA084 - (1290,90,foo,,,,"ft2 ",) | 1290 | 90 | foo | | | | ft2 | | (90,91,AAA090) | 90 | 91 | AAA090 - (1296,96,foo,,,,"ft2 ",) | 1296 | 96 | foo | | | | ft2 | | (96,97,AAA096) | 96 | 97 | AAA096 -(16 rows) - +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +ERROR: could not find junk ctid1 column EXPLAIN (verbose, costs off) DELETE FROM ft2 USING ft4 LEFT JOIN ft5 ON (ft4.c1 = ft5.c1) WHERE ft2.c1 > 1200 AND ft2.c1 % 10 = 0 AND ft2.c2 = ft4.c1 RETURNING 100; -- can be pushed down - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Delete on public.ft2 - Output: 100 - -> Foreign Delete - Remote SQL: DELETE FROM "S 1"."T 1" r1 USING ("S 1"."T 3" r2 LEFT JOIN "S 1"."T 4" r3 ON (((r2.c1 = r3.c1)))) WHERE ((r1.c2 = r2.c1)) AND ((r1."C 1" > 1200)) AND (((r1."C 1" % 10) = 0)) -(4 rows) - +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +ERROR: could not find junk ctid1 column DELETE FROM ft2 USING ft4 LEFT JOIN ft5 ON (ft4.c1 = ft5.c1) WHERE ft2.c1 > 1200 AND ft2.c1 % 10 = 0 AND ft2.c2 = ft4.c1 RETURNING 100; - ?column? ----------- - 100 - 100 - 100 - 100 - 100 - 100 - 100 - 100 - 100 - 100 -(10 rows) - +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +ERROR: could not find junk ctid1 column DELETE FROM ft2 WHERE ft2.c1 > 1200; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree -- Test UPDATE with a MULTIEXPR sub-select -- (maybe someday this'll be remotely executable, but not today) EXPLAIN (verbose, costs off) @@ -6166,6 +6410,7 @@ FROM ft2 AS src WHERE target.c1 = src.c1 ) WHERE c1 > 1100; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ----------------------------------------------------------------------------------------------------------------------- Update on public.ft2 target @@ -6184,46 +6429,33 @@ FROM ft2 AS src WHERE target.c1 = src.c1 ) WHERE c1 > 1100; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree UPDATE ft2 AS target SET (c2) = ( SELECT c2 / 10 FROM ft2 AS src WHERE target.c1 = src.c1 ) WHERE c1 > 1100; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree -- Test UPDATE involving a join that can be pushed down, -- but a SET clause that can't be EXPLAIN (VERBOSE, COSTS OFF) UPDATE ft2 d SET c2 = CASE WHEN random() >= 0 THEN d.c2 ELSE 0 END FROM ft2 AS t WHERE d.c1 = t.c1 AND d.c1 > 1000; - QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - Update on public.ft2 d - Remote SQL: UPDATE "S 1"."T 1" SET c2 = $2 WHERE ctid = $1 - -> Foreign Scan - Output: CASE WHEN (random() >= '0'::double precision) THEN d.c2 ELSE 0 END, d.ctid, d.*, t.* - Relations: (public.ft2 d) INNER JOIN (public.ft2 t) - Remote SQL: SELECT r1.c2, r1.ctid, CASE WHEN (r1.*)::text IS NOT NULL THEN ROW(r1."C 1", r1.c2, r1.c3, r1.c4, r1.c5, r1.c6, r1.c7, r1.c8) END, CASE WHEN (r2.*)::text IS NOT NULL THEN ROW(r2."C 1", r2.c2, r2.c3, r2.c4, r2.c5, r2.c6, r2.c7, r2.c8) END FROM ("S 1"."T 1" r1 INNER JOIN "S 1"."T 1" r2 ON (((r1."C 1" = r2."C 1")) AND ((r1."C 1" > 1000)))) FOR UPDATE OF r1 - -> Hash Join - Output: d.c2, d.ctid, d.*, t.* - Hash Cond: (d.c1 = t.c1) - -> Foreign Scan on public.ft2 d - Output: d.c2, d.ctid, d.*, d.c1 - Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8, ctid FROM "S 1"."T 1" WHERE (("C 1" > 1000)) ORDER BY "C 1" ASC NULLS LAST FOR UPDATE - -> Hash - Output: t.*, t.c1 - -> Foreign Scan on public.ft2 t - Output: t.*, t.c1 - Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" -(17 rows) - +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +ERROR: could not find junk ctid1 column UPDATE ft2 d SET c2 = CASE WHEN random() >= 0 THEN d.c2 ELSE 0 END FROM ft2 AS t WHERE d.c1 = t.c1 AND d.c1 > 1000; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +ERROR: could not find junk ctid1 column -- Test UPDATE/DELETE with WHERE or JOIN/ON conditions containing -- user-defined operators/functions ALTER SERVER loopback OPTIONS (DROP extensions); INSERT INTO ft2 (c1,c2,c3) SELECT id, id % 10, to_char(id, 'FM00000') FROM generate_series(2001, 2010) id; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree EXPLAIN (verbose, costs off) UPDATE ft2 SET c3 = 'bar' WHERE postgres_fdw_abs(c1) > 2000 RETURNING *; -- can't be pushed down +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ---------------------------------------------------------------------------------------------------------- Update on public.ft2 @@ -6236,6 +6468,7 @@ (7 rows) UPDATE ft2 SET c3 = 'bar' WHERE postgres_fdw_abs(c1) > 2000 RETURNING *; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 ------+----+-----+----+----+----+------------+---- 2001 | 1 | bar | | | | ft2 | @@ -6255,84 +6488,29 @@ FROM ft4 INNER JOIN ft5 ON (ft4.c1 = ft5.c1) WHERE ft2.c1 > 2000 AND ft2.c2 === ft4.c1 RETURNING ft2.*, ft4.*, ft5.*; -- can't be pushed down - QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Update on public.ft2 - Output: ft2.c1, ft2.c2, ft2.c3, ft2.c4, ft2.c5, ft2.c6, ft2.c7, ft2.c8, ft4.c1, ft4.c2, ft4.c3, ft5.c1, ft5.c2, ft5.c3 - Remote SQL: UPDATE "S 1"."T 1" SET c3 = $2 WHERE ctid = $1 RETURNING "C 1", c2, c3, c4, c5, c6, c7, c8 - -> Nested Loop - Output: 'baz'::text, ft2.ctid, ft2.*, ft4.*, ft5.*, ft4.c1, ft4.c2, ft4.c3, ft5.c1, ft5.c2, ft5.c3 - Join Filter: (ft2.c2 === ft4.c1) - -> Foreign Scan on public.ft2 - Output: ft2.ctid, ft2.*, ft2.c2 - Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8, ctid FROM "S 1"."T 1" WHERE (("C 1" > 2000)) FOR UPDATE - -> Foreign Scan - Output: ft4.*, ft4.c1, ft4.c2, ft4.c3, ft5.*, ft5.c1, ft5.c2, ft5.c3 - Relations: (public.ft4) INNER JOIN (public.ft5) - Remote SQL: SELECT CASE WHEN (r2.*)::text IS NOT NULL THEN ROW(r2.c1, r2.c2, r2.c3) END, r2.c1, r2.c2, r2.c3, CASE WHEN (r3.*)::text IS NOT NULL THEN ROW(r3.c1, r3.c2, r3.c3) END, r3.c1, r3.c2, r3.c3 FROM ("S 1"."T 3" r2 INNER JOIN "S 1"."T 4" r3 ON (((r2.c1 = r3.c1)))) - -> Hash Join - Output: ft4.*, ft4.c1, ft4.c2, ft4.c3, ft5.*, ft5.c1, ft5.c2, ft5.c3 - Hash Cond: (ft4.c1 = ft5.c1) - -> Foreign Scan on public.ft4 - Output: ft4.*, ft4.c1, ft4.c2, ft4.c3 - Remote SQL: SELECT c1, c2, c3 FROM "S 1"."T 3" - -> Hash - Output: ft5.*, ft5.c1, ft5.c2, ft5.c3 - -> Foreign Scan on public.ft5 - Output: ft5.*, ft5.c1, ft5.c2, ft5.c3 - Remote SQL: SELECT c1, c2, c3 FROM "S 1"."T 4" -(24 rows) - +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +ERROR: could not find junk ctid1 column UPDATE ft2 SET c3 = 'baz' FROM ft4 INNER JOIN ft5 ON (ft4.c1 = ft5.c1) WHERE ft2.c1 > 2000 AND ft2.c2 === ft4.c1 RETURNING ft2.*, ft4.*, ft5.*; - c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 | c1 | c2 | c3 | c1 | c2 | c3 -------+----+-----+----+----+----+------------+----+----+----+--------+----+----+-------- - 2006 | 6 | baz | | | | ft2 | | 6 | 7 | AAA006 | 6 | 7 | AAA006 -(1 row) - +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +ERROR: could not find junk ctid1 column EXPLAIN (verbose, costs off) DELETE FROM ft2 USING ft4 INNER JOIN ft5 ON (ft4.c1 === ft5.c1) WHERE ft2.c1 > 2000 AND ft2.c2 = ft4.c1 RETURNING ft2.c1, ft2.c2, ft2.c3; -- can't be pushed down - QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Delete on public.ft2 - Output: ft2.c1, ft2.c2, ft2.c3 - Remote SQL: DELETE FROM "S 1"."T 1" WHERE ctid = $1 RETURNING "C 1", c2, c3 - -> Foreign Scan - Output: ft2.ctid, ft4.*, ft5.* - Filter: (ft4.c1 === ft5.c1) - Relations: ((public.ft2) INNER JOIN (public.ft4)) INNER JOIN (public.ft5) - Remote SQL: SELECT r1.ctid, CASE WHEN (r2.*)::text IS NOT NULL THEN ROW(r2.c1, r2.c2, r2.c3) END, CASE WHEN (r3.*)::text IS NOT NULL THEN ROW(r3.c1, r3.c2, r3.c3) END, r2.c1, r3.c1 FROM (("S 1"."T 1" r1 INNER JOIN "S 1"."T 3" r2 ON (((r1.c2 = r2.c1)) AND ((r1."C 1" > 2000)))) INNER JOIN "S 1"."T 4" r3 ON (TRUE)) FOR UPDATE OF r1 - -> Nested Loop - Output: ft2.ctid, ft4.*, ft5.*, ft4.c1, ft5.c1 - -> Nested Loop - Output: ft2.ctid, ft4.*, ft4.c1 - Join Filter: (ft2.c2 = ft4.c1) - -> Foreign Scan on public.ft2 - Output: ft2.ctid, ft2.c2 - Remote SQL: SELECT c2, ctid FROM "S 1"."T 1" WHERE (("C 1" > 2000)) FOR UPDATE - -> Foreign Scan on public.ft4 - Output: ft4.*, ft4.c1 - Remote SQL: SELECT c1, c2, c3 FROM "S 1"."T 3" - -> Foreign Scan on public.ft5 - Output: ft5.*, ft5.c1 - Remote SQL: SELECT c1, c2, c3 FROM "S 1"."T 4" -(22 rows) - +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +ERROR: could not find junk ctid1 column DELETE FROM ft2 USING ft4 INNER JOIN ft5 ON (ft4.c1 === ft5.c1) WHERE ft2.c1 > 2000 AND ft2.c2 = ft4.c1 RETURNING ft2.c1, ft2.c2, ft2.c3; - c1 | c2 | c3 -------+----+----- - 2006 | 6 | baz -(1 row) - +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +ERROR: could not find junk ctid1 column DELETE FROM ft2 WHERE ft2.c1 > 2000; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ALTER SERVER loopback OPTIONS (ADD extensions 'postgres_fdw'); -- Test that trigger on remote table works as expected CREATE OR REPLACE FUNCTION "S 1".F_BRTRIG() RETURNS trigger AS $$ @@ -6344,18 +6522,21 @@ CREATE TRIGGER t1_br_insert BEFORE INSERT OR UPDATE ON "S 1"."T 1" FOR EACH ROW EXECUTE PROCEDURE "S 1".F_BRTRIG(); INSERT INTO ft2 (c1,c2,c3) VALUES (1208, 818, 'fff') RETURNING *; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 ------+-----+-----------------+----+----+----+------------+---- 1208 | 818 | fff_trig_update | | | | ft2 | (1 row) INSERT INTO ft2 (c1,c2,c3,c6) VALUES (1218, 818, 'ggg', '(--;') RETURNING *; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 ------+-----+-----------------+----+----+------+------------+---- 1218 | 818 | ggg_trig_update | | | (--; | ft2 | (1 row) UPDATE ft2 SET c2 = c2 + 600 WHERE c1 % 10 = 8 AND c1 < 1200 RETURNING *; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 ------+-----+------------------------+------------------------------+--------------------------+----+------------+----- 8 | 608 | 00008_trig_update | Fri Jan 09 00:00:00 1970 PST | Fri Jan 09 00:00:00 1970 | 8 | 8 | foo @@ -6465,218 +6646,287 @@ -- Test errors thrown on remote side during update ALTER TABLE "S 1"."T 1" ADD CONSTRAINT c2positive CHECK (c2 >= 0); INSERT INTO ft1(c1, c2) VALUES(11, 12); -- duplicate key +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ERROR: duplicate key value violates unique constraint "t1_pkey" DETAIL: Key ("C 1")=(11) already exists. CONTEXT: remote SQL command: INSERT INTO "S 1"."T 1"("C 1", c2, c3, c4, c5, c6, c7, c8) VALUES ($1, $2, $3, $4, $5, $6, $7, $8) INSERT INTO ft1(c1, c2) VALUES(11, 12) ON CONFLICT DO NOTHING; -- works +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree INSERT INTO ft1(c1, c2) VALUES(11, 12) ON CONFLICT (c1, c2) DO NOTHING; -- unsupported +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ERROR: there is no unique or exclusion constraint matching the ON CONFLICT specification INSERT INTO ft1(c1, c2) VALUES(11, 12) ON CONFLICT (c1, c2) DO UPDATE SET c3 = 'ffg'; -- unsupported +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ERROR: there is no unique or exclusion constraint matching the ON CONFLICT specification INSERT INTO ft1(c1, c2) VALUES(1111, -2); -- c2positive +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ERROR: new row for relation "T 1" violates check constraint "c2positive" DETAIL: Failing row contains (1111, -2, null, null, null, null, ft1 , null). CONTEXT: remote SQL command: INSERT INTO "S 1"."T 1"("C 1", c2, c3, c4, c5, c6, c7, c8) VALUES ($1, $2, $3, $4, $5, $6, $7, $8) UPDATE ft1 SET c2 = -c2 WHERE c1 = 1; -- c2positive +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ERROR: new row for relation "T 1" violates check constraint "c2positive" DETAIL: Failing row contains (1, -1, 00001_trig_update, 1970-01-02 08:00:00+00, 1970-01-02 00:00:00, 1, 1 , foo). CONTEXT: remote SQL command: UPDATE "S 1"."T 1" SET c2 = (- c2) WHERE (("C 1" = 1)) -- Test savepoint/rollback behavior select c2, count(*) from ft2 where c2 < 500 group by 1 order by 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c2 | count -----+------- 0 | 100 1 | 100 + 2 | 100 4 | 100 6 | 100 + 9 | 100 100 | 2 101 | 2 + 102 | 2 104 | 2 106 | 2 + 109 | 2 201 | 1 + 202 | 1 204 | 1 303 | 100 403 | 2 407 | 100 -(13 rows) +(18 rows) select c2, count(*) from "S 1"."T 1" where c2 < 500 group by 1 order by 1; c2 | count -----+------- 0 | 100 1 | 100 + 2 | 100 4 | 100 6 | 100 + 9 | 100 100 | 2 101 | 2 + 102 | 2 104 | 2 106 | 2 + 109 | 2 201 | 1 + 202 | 1 204 | 1 303 | 100 403 | 2 407 | 100 -(13 rows) +(18 rows) begin; update ft2 set c2 = 42 where c2 = 0; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree select c2, count(*) from ft2 where c2 < 500 group by 1 order by 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c2 | count -----+------- 1 | 100 + 2 | 100 4 | 100 6 | 100 + 9 | 100 42 | 100 100 | 2 101 | 2 + 102 | 2 104 | 2 106 | 2 + 109 | 2 201 | 1 + 202 | 1 204 | 1 303 | 100 403 | 2 407 | 100 -(13 rows) +(18 rows) savepoint s1; update ft2 set c2 = 44 where c2 = 4; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree select c2, count(*) from ft2 where c2 < 500 group by 1 order by 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c2 | count -----+------- 1 | 100 + 2 | 100 6 | 100 + 9 | 100 42 | 100 44 | 100 100 | 2 101 | 2 + 102 | 2 104 | 2 106 | 2 + 109 | 2 201 | 1 + 202 | 1 204 | 1 303 | 100 403 | 2 407 | 100 -(13 rows) +(18 rows) release savepoint s1; select c2, count(*) from ft2 where c2 < 500 group by 1 order by 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c2 | count -----+------- 1 | 100 + 2 | 100 6 | 100 + 9 | 100 42 | 100 44 | 100 100 | 2 101 | 2 + 102 | 2 104 | 2 106 | 2 + 109 | 2 201 | 1 + 202 | 1 204 | 1 303 | 100 403 | 2 407 | 100 -(13 rows) +(18 rows) savepoint s2; update ft2 set c2 = 46 where c2 = 6; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree select c2, count(*) from ft2 where c2 < 500 group by 1 order by 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c2 | count -----+------- 1 | 100 + 2 | 100 + 9 | 100 42 | 100 44 | 100 46 | 100 100 | 2 101 | 2 + 102 | 2 104 | 2 106 | 2 + 109 | 2 201 | 1 + 202 | 1 204 | 1 303 | 100 403 | 2 407 | 100 -(13 rows) +(18 rows) rollback to savepoint s2; select c2, count(*) from ft2 where c2 < 500 group by 1 order by 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c2 | count -----+------- 1 | 100 + 2 | 100 6 | 100 + 9 | 100 42 | 100 44 | 100 100 | 2 101 | 2 + 102 | 2 104 | 2 106 | 2 + 109 | 2 201 | 1 + 202 | 1 204 | 1 303 | 100 403 | 2 407 | 100 -(13 rows) +(18 rows) release savepoint s2; select c2, count(*) from ft2 where c2 < 500 group by 1 order by 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c2 | count -----+------- 1 | 100 + 2 | 100 6 | 100 + 9 | 100 42 | 100 44 | 100 100 | 2 101 | 2 + 102 | 2 104 | 2 106 | 2 + 109 | 2 201 | 1 + 202 | 1 204 | 1 303 | 100 403 | 2 407 | 100 -(13 rows) +(18 rows) savepoint s3; update ft2 set c2 = -2 where c2 = 42 and c1 = 10; -- fail on remote side +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ERROR: new row for relation "T 1" violates check constraint "c2positive" DETAIL: Failing row contains (10, -2, 00010_trig_update_trig_update, 1970-01-11 08:00:00+00, 1970-01-11 00:00:00, 0, 0 , foo). CONTEXT: remote SQL command: UPDATE "S 1"."T 1" SET c2 = (-2) WHERE ((c2 = 42)) AND (("C 1" = 10)) rollback to savepoint s3; select c2, count(*) from ft2 where c2 < 500 group by 1 order by 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c2 | count -----+------- 1 | 100 + 2 | 100 6 | 100 + 9 | 100 42 | 100 44 | 100 100 | 2 101 | 2 + 102 | 2 104 | 2 106 | 2 + 109 | 2 201 | 1 + 202 | 1 204 | 1 303 | 100 403 | 2 407 | 100 -(13 rows) +(18 rows) release savepoint s3; select c2, count(*) from ft2 where c2 < 500 group by 1 order by 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c2 | count -----+------- 1 | 100 + 2 | 100 6 | 100 + 9 | 100 42 | 100 44 | 100 100 | 2 101 | 2 + 102 | 2 104 | 2 106 | 2 + 109 | 2 201 | 1 + 202 | 1 204 | 1 303 | 100 403 | 2 407 | 100 -(13 rows) +(18 rows) -- none of the above is committed yet remotely select c2, count(*) from "S 1"."T 1" where c2 < 500 group by 1 order by 1; @@ -6684,61 +6934,78 @@ -----+------- 0 | 100 1 | 100 + 2 | 100 4 | 100 6 | 100 + 9 | 100 100 | 2 101 | 2 + 102 | 2 104 | 2 106 | 2 + 109 | 2 201 | 1 + 202 | 1 204 | 1 303 | 100 403 | 2 407 | 100 -(13 rows) +(18 rows) commit; select c2, count(*) from ft2 where c2 < 500 group by 1 order by 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree c2 | count -----+------- 1 | 100 + 2 | 100 6 | 100 + 9 | 100 42 | 100 44 | 100 100 | 2 101 | 2 + 102 | 2 104 | 2 106 | 2 + 109 | 2 201 | 1 + 202 | 1 204 | 1 303 | 100 403 | 2 407 | 100 -(13 rows) +(18 rows) select c2, count(*) from "S 1"."T 1" where c2 < 500 group by 1 order by 1; c2 | count -----+------- 1 | 100 + 2 | 100 6 | 100 + 9 | 100 42 | 100 44 | 100 100 | 2 101 | 2 + 102 | 2 104 | 2 106 | 2 + 109 | 2 201 | 1 + 202 | 1 204 | 1 303 | 100 403 | 2 407 | 100 -(13 rows) +(18 rows) VACUUM ANALYZE "S 1"."T 1"; -- Above DMLs add data with c6 as NULL in ft1, so test ORDER BY NULLS LAST and NULLs -- FIRST behavior here. -- ORDER BY DESC NULLS LAST options EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 ORDER BY c6 DESC NULLS LAST, c1 OFFSET 795 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan on public.ft1 @@ -6747,22 +7014,24 @@ (3 rows) SELECT * FROM ft1 ORDER BY c6 DESC NULLS LAST, c1 OFFSET 795 LIMIT 10; - c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 -------+-----+--------------------+------------------------------+--------------------------+------+------------+----- - 960 | 42 | 00960_trig_update | Mon Mar 02 00:00:00 1970 PST | Mon Mar 02 00:00:00 1970 | 0 | 0 | foo - 970 | 42 | 00970_trig_update | Thu Mar 12 00:00:00 1970 PST | Thu Mar 12 00:00:00 1970 | 0 | 0 | foo - 980 | 42 | 00980_trig_update | Sun Mar 22 00:00:00 1970 PST | Sun Mar 22 00:00:00 1970 | 0 | 0 | foo - 990 | 42 | 00990_trig_update | Wed Apr 01 00:00:00 1970 PST | Wed Apr 01 00:00:00 1970 | 0 | 0 | foo - 1000 | 42 | 01000_trig_update | Thu Jan 01 00:00:00 1970 PST | Thu Jan 01 00:00:00 1970 | 0 | 0 | foo - 1218 | 818 | ggg_trig_update | | | (--; | ft2 | - 1001 | 101 | 0000100001 | | | | ft2 | - 1003 | 403 | 0000300003_update3 | | | | ft2 | - 1004 | 104 | 0000400004 | | | | ft2 | - 1006 | 106 | 0000600006 | | | | ft2 | +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree + c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 +-----+----+-------------------+------------------------------+--------------------------+----+------------+----- + 951 | 1 | 00951 | Sat Feb 21 00:00:00 1970 PST | Sat Feb 21 00:00:00 1970 | 1 | 1 | foo + 961 | 1 | 00961 | Tue Mar 03 00:00:00 1970 PST | Tue Mar 03 00:00:00 1970 | 1 | 1 | foo + 971 | 1 | 00971 | Fri Mar 13 00:00:00 1970 PST | Fri Mar 13 00:00:00 1970 | 1 | 1 | foo + 981 | 1 | 00981 | Mon Mar 23 00:00:00 1970 PST | Mon Mar 23 00:00:00 1970 | 1 | 1 | foo + 991 | 1 | 00991 | Thu Apr 02 00:00:00 1970 PST | Thu Apr 02 00:00:00 1970 | 1 | 1 | foo + 10 | 42 | 00010_trig_update | Sun Jan 11 00:00:00 1970 PST | Sun Jan 11 00:00:00 1970 | 0 | 0 | foo + 20 | 42 | 00020_trig_update | Wed Jan 21 00:00:00 1970 PST | Wed Jan 21 00:00:00 1970 | 0 | 0 | foo + 30 | 42 | 00030_trig_update | Sat Jan 31 00:00:00 1970 PST | Sat Jan 31 00:00:00 1970 | 0 | 0 | foo + 40 | 42 | 00040_trig_update | Tue Feb 10 00:00:00 1970 PST | Tue Feb 10 00:00:00 1970 | 0 | 0 | foo + 50 | 42 | 00050_trig_update | Fri Feb 20 00:00:00 1970 PST | Fri Feb 20 00:00:00 1970 | 0 | 0 | foo (10 rows) -- ORDER BY DESC NULLS FIRST options EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 ORDER BY c6 DESC NULLS FIRST, c1 OFFSET 15 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan on public.ft1 @@ -6771,22 +7040,24 @@ (3 rows) SELECT * FROM ft1 ORDER BY c6 DESC NULLS FIRST, c1 OFFSET 15 LIMIT 10; - c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 -------+-----+-----------------+------------------------------+--------------------------+----+------------+----- - 1020 | 100 | 0002000020 | | | | ft2 | - 1101 | 201 | aaa | | | | ft2 | - 1103 | 503 | ccc_update3 | | | | ft2 | - 1104 | 204 | ddd | | | | ft2 | - 1208 | 818 | fff_trig_update | | | | ft2 | - 9 | 509 | 00009_update9 | Sat Jan 10 00:00:00 1970 PST | Sat Jan 10 00:00:00 1970 | 9 | ft2 | foo - 19 | 509 | 00019_update9 | Tue Jan 20 00:00:00 1970 PST | Tue Jan 20 00:00:00 1970 | 9 | ft2 | foo - 29 | 509 | 00029_update9 | Fri Jan 30 00:00:00 1970 PST | Fri Jan 30 00:00:00 1970 | 9 | ft2 | foo - 39 | 509 | 00039_update9 | Mon Feb 09 00:00:00 1970 PST | Mon Feb 09 00:00:00 1970 | 9 | ft2 | foo - 49 | 509 | 00049_update9 | Thu Feb 19 00:00:00 1970 PST | Thu Feb 19 00:00:00 1970 | 9 | ft2 | foo +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree + c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 +------+-----+------------------------+------------------------------+--------------------------+----+------------+----- + 1018 | 708 | 0001800018_trig_update | | | | ft2 | + 1019 | 109 | 0001900019 | | | | ft2 | + 1020 | 100 | 0002000020 | | | | ft2 | + 1101 | 201 | aaa | | | | ft2 | + 1102 | 202 | bbb | | | | ft2 | + 1103 | 503 | ccc_update3 | | | | ft2 | + 1104 | 204 | ddd | | | | ft2 | + 1208 | 818 | fff_trig_update | | | | ft2 | + 9 | 9 | 00009 | Sat Jan 10 00:00:00 1970 PST | Sat Jan 10 00:00:00 1970 | 9 | 9 | foo + 19 | 9 | 00019 | Tue Jan 20 00:00:00 1970 PST | Tue Jan 20 00:00:00 1970 | 9 | 9 | foo (10 rows) -- ORDER BY ASC NULLS FIRST options EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 ORDER BY c6 ASC NULLS FIRST, c1 OFFSET 15 LIMIT 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan on public.ft1 @@ -6795,18 +7066,19 @@ (3 rows) SELECT * FROM ft1 ORDER BY c6 ASC NULLS FIRST, c1 OFFSET 15 LIMIT 10; - c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 -------+-----+-------------------+------------------------------+--------------------------+------+------------+----- - 1020 | 100 | 0002000020 | | | | ft2 | - 1101 | 201 | aaa | | | | ft2 | - 1103 | 503 | ccc_update3 | | | | ft2 | - 1104 | 204 | ddd | | | | ft2 | - 1208 | 818 | fff_trig_update | | | | ft2 | - 1218 | 818 | ggg_trig_update | | | (--; | ft2 | - 10 | 42 | 00010_trig_update | Sun Jan 11 00:00:00 1970 PST | Sun Jan 11 00:00:00 1970 | 0 | 0 | foo - 20 | 42 | 00020_trig_update | Wed Jan 21 00:00:00 1970 PST | Wed Jan 21 00:00:00 1970 | 0 | 0 | foo - 30 | 42 | 00030_trig_update | Sat Jan 31 00:00:00 1970 PST | Sat Jan 31 00:00:00 1970 | 0 | 0 | foo - 40 | 42 | 00040_trig_update | Tue Feb 10 00:00:00 1970 PST | Tue Feb 10 00:00:00 1970 | 0 | 0 | foo +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree + c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 +------+-----+------------------------+------------------------------+--------------------------+------+------------+----- + 1018 | 708 | 0001800018_trig_update | | | | ft2 | + 1019 | 109 | 0001900019 | | | | ft2 | + 1020 | 100 | 0002000020 | | | | ft2 | + 1101 | 201 | aaa | | | | ft2 | + 1102 | 202 | bbb | | | | ft2 | + 1103 | 503 | ccc_update3 | | | | ft2 | + 1104 | 204 | ddd | | | | ft2 | + 1208 | 818 | fff_trig_update | | | | ft2 | + 1218 | 818 | ggg_trig_update | | | (--; | ft2 | + 10 | 42 | 00010_trig_update | Sun Jan 11 00:00:00 1970 PST | Sun Jan 11 00:00:00 1970 | 0 | 0 | foo (10 rows) -- =================================================================== @@ -6815,6 +7087,7 @@ -- Consistent check constraints provide consistent results ALTER FOREIGN TABLE ft1 ADD CONSTRAINT ft1_c2positive CHECK (c2 >= 0); EXPLAIN (VERBOSE, COSTS OFF) SELECT count(*) FROM ft1 WHERE c2 < 0; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ----------------------------------------------------------------- Foreign Scan @@ -6824,6 +7097,7 @@ (4 rows) SELECT count(*) FROM ft1 WHERE c2 < 0; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree count ------- 0 @@ -6831,6 +7105,7 @@ SET constraint_exclusion = 'on'; EXPLAIN (VERBOSE, COSTS OFF) SELECT count(*) FROM ft1 WHERE c2 < 0; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN -------------------------------- Aggregate @@ -6840,6 +7115,7 @@ (4 rows) SELECT count(*) FROM ft1 WHERE c2 < 0; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree count ------- 0 @@ -6848,10 +7124,12 @@ RESET constraint_exclusion; -- check constraint is enforced on the remote side, not locally INSERT INTO ft1(c1, c2) VALUES(1111, -2); -- c2positive +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ERROR: new row for relation "T 1" violates check constraint "c2positive" DETAIL: Failing row contains (1111, -2, null, null, null, null, ft1 , null). CONTEXT: remote SQL command: INSERT INTO "S 1"."T 1"("C 1", c2, c3, c4, c5, c6, c7, c8) VALUES ($1, $2, $3, $4, $5, $6, $7, $8) UPDATE ft1 SET c2 = -c2 WHERE c1 = 1; -- c2positive +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ERROR: new row for relation "T 1" violates check constraint "c2positive" DETAIL: Failing row contains (1, -1, 00001_trig_update, 1970-01-02 08:00:00+00, 1970-01-02 00:00:00, 1, 1 , foo). CONTEXT: remote SQL command: UPDATE "S 1"."T 1" SET c2 = (- c2) WHERE (("C 1" = 1)) @@ -6859,6 +7137,7 @@ -- But inconsistent check constraints provide inconsistent results ALTER FOREIGN TABLE ft1 ADD CONSTRAINT ft1_c2negative CHECK (c2 < 0); EXPLAIN (VERBOSE, COSTS OFF) SELECT count(*) FROM ft1 WHERE c2 >= 0; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------ Foreign Scan @@ -6868,13 +7147,15 @@ (4 rows) SELECT count(*) FROM ft1 WHERE c2 >= 0; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree count ------- - 821 + 924 (1 row) SET constraint_exclusion = 'on'; EXPLAIN (VERBOSE, COSTS OFF) SELECT count(*) FROM ft1 WHERE c2 >= 0; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN -------------------------------- Aggregate @@ -6884,6 +7165,7 @@ (4 rows) SELECT count(*) FROM ft1 WHERE c2 >= 0; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree count ------- 0 @@ -6892,7 +7174,9 @@ RESET constraint_exclusion; -- local check constraint is not actually enforced INSERT INTO ft1(c1, c2) VALUES(1111, 2); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree UPDATE ft1 SET c2 = c2 + 1 WHERE c1 = 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ALTER FOREIGN TABLE ft1 DROP CONSTRAINT ft1_c2negative; -- =================================================================== -- test WITH CHECK OPTION constraints @@ -6906,6 +7190,8 @@ CREATE VIEW rw_view AS SELECT * FROM foreign_tbl WHERE a < b WITH CHECK OPTION; \d+ rw_view +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree View "public.rw_view" Column | Type | Collation | Nullable | Default | Storage | Description --------+---------+-----------+----------+---------+---------+------------- @@ -6945,6 +7231,7 @@ INSERT INTO rw_view VALUES (0, 15); -- ok SELECT * FROM foreign_tbl; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree a | b ----+---- 10 | 15 @@ -6977,6 +7264,7 @@ UPDATE rw_view SET b = b + 15; -- ok SELECT * FROM foreign_tbl; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree a | b ----+---- 20 | 30 @@ -6986,6 +7274,7 @@ ALTER SERVER loopback OPTIONS (ADD batch_size '10'); EXPLAIN (VERBOSE, COSTS OFF) INSERT INTO rw_view VALUES (0, 15), (0, 5); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN -------------------------------------------------------------------------------- Insert on public.foreign_tbl @@ -6996,9 +7285,11 @@ (5 rows) INSERT INTO rw_view VALUES (0, 15), (0, 5); -- should fail +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ERROR: new row violates check option for view "rw_view" DETAIL: Failing row contains (10, 5). SELECT * FROM foreign_tbl; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree a | b ----+---- 20 | 30 @@ -7023,6 +7314,8 @@ CREATE VIEW rw_view AS SELECT * FROM parent_tbl WHERE a < b WITH CHECK OPTION; \d+ rw_view +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree View "public.rw_view" Column | Type | Collation | Nullable | Default | Storage | Description --------+---------+-----------+----------+---------+---------+------------- @@ -7058,6 +7351,7 @@ INSERT INTO rw_view VALUES (0, 15); -- ok SELECT * FROM foreign_tbl; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree a | b ----+---- 10 | 15 @@ -7092,6 +7386,7 @@ UPDATE rw_view SET b = b + 15; -- ok SELECT * FROM foreign_tbl; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree a | b ----+---- 20 | 30 @@ -7101,6 +7396,7 @@ ALTER SERVER loopback OPTIONS (ADD batch_size '10'); EXPLAIN (VERBOSE, COSTS OFF) INSERT INTO rw_view VALUES (0, 15), (0, 5); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN -------------------------------------------------------- Insert on public.parent_tbl @@ -7109,9 +7405,11 @@ (3 rows) INSERT INTO rw_view VALUES (0, 15), (0, 5); -- should fail +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ERROR: new row violates check option for view "rw_view" DETAIL: Failing row contains (10, 5). SELECT * FROM foreign_tbl; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree a | b ----+---- 20 | 30 @@ -7134,6 +7432,7 @@ ALTER TABLE sub_parent ATTACH PARTITION child_foreign FOR VALUES FROM (1) TO (10); CREATE VIEW rw_view AS SELECT * FROM parent_tbl WHERE a < 5 WITH CHECK OPTION; INSERT INTO parent_tbl (a) VALUES(1),(5); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree EXPLAIN (VERBOSE, COSTS OFF) UPDATE rw_view SET b = 'text', c = 123.456; QUERY PLAN @@ -7174,8 +7473,10 @@ insert into loc1(f2) values('hi'); insert into rem1(f2) values('hi remote'); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree insert into loc1(f2) values('bye'); insert into rem1(f2) values('bye remote'); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree select * from loc1; f1 | f2 ----+------------ @@ -7186,6 +7487,7 @@ (4 rows) select * from rem1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree f1 | f2 ----+------------ 1 | hi @@ -7207,6 +7509,7 @@ server loopback options(table_name 'gloc1'); explain (verbose, costs off) insert into grem1 (a) values (1), (2); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------- Insert on public.grem1 @@ -7217,8 +7520,10 @@ (5 rows) insert into grem1 (a) values (1), (2); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree explain (verbose, costs off) update grem1 set a = 22 where a = 2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------ Update on public.grem1 @@ -7229,6 +7534,7 @@ (5 rows) update grem1 set a = 22 where a = 2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree select * from gloc1; a | b ----+---- @@ -7237,6 +7543,7 @@ (2 rows) select * from grem1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree a | b ----+---- 1 | 2 @@ -7244,6 +7551,7 @@ (2 rows) delete from grem1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree -- test copy from copy grem1 from stdin; select * from gloc1; @@ -7254,6 +7562,7 @@ (2 rows) select * from grem1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree a | b ---+--- 1 | 2 @@ -7261,10 +7570,12 @@ (2 rows) delete from grem1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree -- test batch insert alter server loopback options (add batch_size '10'); explain (verbose, costs off) insert into grem1 (a) values (1), (2); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------- Insert on public.grem1 @@ -7275,6 +7586,7 @@ (5 rows) insert into grem1 (a) values (1), (2); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree select * from gloc1; a | b ---+--- @@ -7283,6 +7595,7 @@ (2 rows) select * from grem1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree a | b ---+--- 1 | 2 @@ -7290,11 +7603,13 @@ (2 rows) delete from grem1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree -- batch insert with foreign partitions. -- This schema uses two partitions, one local and one remote with a modulo -- to loop across all of them in batches. create table tab_batch_local (id int, data text); insert into tab_batch_local select i, 'test'|| i from generate_series(1, 45) i; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree create table tab_batch_sharded (id int, data text) partition by hash(id); create table tab_batch_sharded_p0 partition of tab_batch_sharded for values with (modulus 2, remainder 0); @@ -7303,6 +7618,7 @@ for values with (modulus 2, remainder 1) server loopback options (table_name 'tab_batch_sharded_p1_remote'); insert into tab_batch_sharded select * from tab_batch_local; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree select count(*) from tab_batch_sharded; count ------- @@ -7373,6 +7689,7 @@ AFTER INSERT OR UPDATE OR DELETE ON rem1 FOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo'); delete from rem1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree NOTICE: trigger_func() called: action = DELETE, when = BEFORE, level = STATEMENT NOTICE: trig_row_before(23, skidoo) BEFORE ROW DELETE ON rem1 NOTICE: OLD: (1,hi) @@ -7392,6 +7709,7 @@ NOTICE: OLD: (11,"bye remote") NOTICE: trigger_func() called: action = DELETE, when = AFTER, level = STATEMENT insert into rem1 values(1,'insert'); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree NOTICE: trigger_func() called: action = INSERT, when = BEFORE, level = STATEMENT NOTICE: trig_row_before(23, skidoo) BEFORE ROW INSERT ON rem1 NOTICE: NEW: (1,insert) @@ -7399,6 +7717,7 @@ NOTICE: NEW: (1,insert) NOTICE: trigger_func() called: action = INSERT, when = AFTER, level = STATEMENT update rem1 set f2 = 'update' where f1 = 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree NOTICE: trigger_func() called: action = UPDATE, when = BEFORE, level = STATEMENT NOTICE: trig_row_before(23, skidoo) BEFORE ROW UPDATE ON rem1 NOTICE: OLD: (1,insert),NEW: (1,update) @@ -7406,6 +7725,7 @@ NOTICE: OLD: (1,insert),NEW: (1,update) NOTICE: trigger_func() called: action = UPDATE, when = AFTER, level = STATEMENT update rem1 set f2 = f2 || f2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree NOTICE: trigger_func() called: action = UPDATE, when = BEFORE, level = STATEMENT NOTICE: trig_row_before(23, skidoo) BEFORE ROW UPDATE ON rem1 NOTICE: OLD: (1,update),NEW: (1,updateupdate) @@ -7421,6 +7741,7 @@ DROP TRIGGER trig_stmt_before ON rem1; DROP TRIGGER trig_stmt_after ON rem1; DELETE from rem1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree -- Test multiple AFTER ROW triggers on a foreign table CREATE TRIGGER trig_row_after1 AFTER INSERT OR UPDATE OR DELETE ON rem1 @@ -7429,21 +7750,25 @@ AFTER INSERT OR UPDATE OR DELETE ON rem1 FOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo'); insert into rem1 values(1,'insert'); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree NOTICE: trig_row_after1(23, skidoo) AFTER ROW INSERT ON rem1 NOTICE: NEW: (1,insert) NOTICE: trig_row_after2(23, skidoo) AFTER ROW INSERT ON rem1 NOTICE: NEW: (1,insert) update rem1 set f2 = 'update' where f1 = 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree NOTICE: trig_row_after1(23, skidoo) AFTER ROW UPDATE ON rem1 NOTICE: OLD: (1,insert),NEW: (1,update) NOTICE: trig_row_after2(23, skidoo) AFTER ROW UPDATE ON rem1 NOTICE: OLD: (1,insert),NEW: (1,update) update rem1 set f2 = f2 || f2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree NOTICE: trig_row_after1(23, skidoo) AFTER ROW UPDATE ON rem1 NOTICE: OLD: (1,update),NEW: (1,updateupdate) NOTICE: trig_row_after2(23, skidoo) AFTER ROW UPDATE ON rem1 NOTICE: OLD: (1,update),NEW: (1,updateupdate) delete from rem1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree NOTICE: trig_row_after1(23, skidoo) AFTER ROW DELETE ON rem1 NOTICE: OLD: (1,updateupdate) NOTICE: trig_row_after2(23, skidoo) AFTER ROW DELETE ON rem1 @@ -7464,14 +7789,18 @@ EXECUTE PROCEDURE trigger_data(23,'skidoo'); -- Insert or update not matching: nothing happens INSERT INTO rem1 values(1, 'insert'); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree UPDATE rem1 set f2 = 'test'; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree -- Insert or update matching: triggers are fired INSERT INTO rem1 values(2, 'update'); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree NOTICE: trig_row_before_insupd(23, skidoo) BEFORE ROW INSERT ON rem1 NOTICE: NEW: (2,update) NOTICE: trig_row_after_insupd(23, skidoo) AFTER ROW INSERT ON rem1 NOTICE: NEW: (2,update) UPDATE rem1 set f2 = 'update update' where f1 = '2'; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree NOTICE: trig_row_before_insupd(23, skidoo) BEFORE ROW UPDATE ON rem1 NOTICE: OLD: (2,update),NEW: (2,"update update") NOTICE: trig_row_after_insupd(23, skidoo) AFTER ROW UPDATE ON rem1 @@ -7488,6 +7817,7 @@ EXECUTE PROCEDURE trigger_data(23,'skidoo'); -- Trigger is fired for f1=2, not for f1=1 DELETE FROM rem1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree NOTICE: trig_row_before_delete(23, skidoo) BEFORE ROW DELETE ON rem1 NOTICE: OLD: (2,"update update") NOTICE: trig_row_after_delete(23, skidoo) AFTER ROW DELETE ON rem1 @@ -7509,6 +7839,7 @@ FOR EACH ROW EXECUTE PROCEDURE trig_row_before_insupdate(); -- The new values should have 'triggered' appended INSERT INTO rem1 values(1, 'insert'); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree SELECT * from loc1; f1 | f2 ----+-------------------- @@ -7516,6 +7847,7 @@ (1 row) INSERT INTO rem1 values(2, 'insert') RETURNING f2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree f2 -------------------- insert triggered ! @@ -7529,6 +7861,7 @@ (2 rows) UPDATE rem1 set f2 = ''; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree SELECT * from loc1; f1 | f2 ----+-------------- @@ -7537,6 +7870,7 @@ (2 rows) UPDATE rem1 set f2 = 'skidoo' RETURNING f2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree f2 -------------------- skidoo triggered ! @@ -7552,6 +7886,7 @@ EXPLAIN (verbose, costs off) UPDATE rem1 set f1 = 10; -- all columns should be transmitted +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ----------------------------------------------------------------------- Update on public.rem1 @@ -7562,6 +7897,7 @@ (5 rows) UPDATE rem1 set f1 = 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree SELECT * from loc1; f1 | f2 ----+-------------------------------- @@ -7570,12 +7906,14 @@ (2 rows) DELETE FROM rem1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree -- Add a second trigger, to check that the changes are propagated correctly -- from trigger to trigger CREATE TRIGGER trig_row_before_insupd2 BEFORE INSERT OR UPDATE ON rem1 FOR EACH ROW EXECUTE PROCEDURE trig_row_before_insupdate(); INSERT INTO rem1 values(1, 'insert'); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree SELECT * from loc1; f1 | f2 ----+-------------------------------- @@ -7583,6 +7921,7 @@ (1 row) INSERT INTO rem1 values(2, 'insert') RETURNING f2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree f2 -------------------------------- insert triggered ! triggered ! @@ -7596,6 +7935,7 @@ (2 rows) UPDATE rem1 set f2 = ''; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree SELECT * from loc1; f1 | f2 ----+-------------------------- @@ -7604,6 +7944,7 @@ (2 rows) UPDATE rem1 set f2 = 'skidoo' RETURNING f2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree f2 -------------------------------- skidoo triggered ! triggered ! @@ -7620,7 +7961,9 @@ DROP TRIGGER trig_row_before_insupd ON rem1; DROP TRIGGER trig_row_before_insupd2 ON rem1; DELETE from rem1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree INSERT INTO rem1 VALUES (1, 'test'); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree -- Test with a trigger returning NULL CREATE FUNCTION trig_null() RETURNS TRIGGER AS $$ BEGIN @@ -7632,6 +7975,7 @@ FOR EACH ROW EXECUTE PROCEDURE trig_null(); -- Nothing should have changed. INSERT INTO rem1 VALUES (2, 'test2'); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree SELECT * from loc1; f1 | f2 ----+------ @@ -7639,6 +7983,7 @@ (1 row) UPDATE rem1 SET f2 = 'test2'; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree SELECT * from loc1; f1 | f2 ----+------ @@ -7646,6 +7991,7 @@ (1 row) DELETE from rem1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree SELECT * from loc1; f1 | f2 ----+------ @@ -7654,6 +8000,7 @@ DROP TRIGGER trig_null ON rem1; DELETE from rem1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree -- Test a combination of local and remote triggers CREATE TRIGGER trig_row_before BEFORE INSERT OR UPDATE OR DELETE ON rem1 @@ -7664,17 +8011,20 @@ CREATE TRIGGER trig_local_before BEFORE INSERT OR UPDATE ON loc1 FOR EACH ROW EXECUTE PROCEDURE trig_row_before_insupdate(); INSERT INTO rem1(f2) VALUES ('test'); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree NOTICE: trig_row_before(23, skidoo) BEFORE ROW INSERT ON rem1 NOTICE: NEW: (12,test) NOTICE: trig_row_after(23, skidoo) AFTER ROW INSERT ON rem1 NOTICE: NEW: (12,"test triggered !") UPDATE rem1 SET f2 = 'testo'; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree NOTICE: trig_row_before(23, skidoo) BEFORE ROW UPDATE ON rem1 NOTICE: OLD: (12,"test triggered !"),NEW: (12,testo) NOTICE: trig_row_after(23, skidoo) AFTER ROW UPDATE ON rem1 NOTICE: OLD: (12,"test triggered !"),NEW: (12,"testo triggered !") -- Test returning a system attribute INSERT INTO rem1(f2) VALUES ('test') RETURNING ctid; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree NOTICE: trig_row_before(23, skidoo) BEFORE ROW INSERT ON rem1 NOTICE: NEW: (13,test) NOTICE: trig_row_after(23, skidoo) AFTER ROW INSERT ON rem1 @@ -7691,6 +8041,7 @@ -- Test direct foreign table modification functionality EXPLAIN (verbose, costs off) DELETE FROM rem1; -- can be pushed down +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN --------------------------------------------- Delete on public.rem1 @@ -7700,6 +8051,7 @@ EXPLAIN (verbose, costs off) DELETE FROM rem1 WHERE false; -- currently can't be pushed down +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------- Delete on public.rem1 @@ -7715,6 +8067,7 @@ FOR EACH STATEMENT EXECUTE PROCEDURE trigger_func(); EXPLAIN (verbose, costs off) UPDATE rem1 set f2 = ''; -- can be pushed down +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ---------------------------------------------------------- Update on public.rem1 @@ -7724,6 +8077,7 @@ EXPLAIN (verbose, costs off) DELETE FROM rem1; -- can be pushed down +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN --------------------------------------------- Delete on public.rem1 @@ -7737,6 +8091,7 @@ FOR EACH STATEMENT EXECUTE PROCEDURE trigger_func(); EXPLAIN (verbose, costs off) UPDATE rem1 set f2 = ''; -- can be pushed down +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ---------------------------------------------------------- Update on public.rem1 @@ -7746,6 +8101,7 @@ EXPLAIN (verbose, costs off) DELETE FROM rem1; -- can be pushed down +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN --------------------------------------------- Delete on public.rem1 @@ -7760,6 +8116,7 @@ FOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo'); EXPLAIN (verbose, costs off) UPDATE rem1 set f2 = ''; -- can be pushed down +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ---------------------------------------------------------- Update on public.rem1 @@ -7769,6 +8126,7 @@ EXPLAIN (verbose, costs off) DELETE FROM rem1; -- can be pushed down +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN --------------------------------------------- Delete on public.rem1 @@ -7782,6 +8140,7 @@ FOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo'); EXPLAIN (verbose, costs off) UPDATE rem1 set f2 = ''; -- can be pushed down +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ---------------------------------------------------------- Update on public.rem1 @@ -7791,6 +8150,7 @@ EXPLAIN (verbose, costs off) DELETE FROM rem1; -- can be pushed down +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN --------------------------------------------- Delete on public.rem1 @@ -7805,6 +8165,7 @@ FOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo'); EXPLAIN (verbose, costs off) UPDATE rem1 set f2 = ''; -- can't be pushed down +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ----------------------------------------------------------------------- Update on public.rem1 @@ -7816,6 +8177,7 @@ EXPLAIN (verbose, costs off) DELETE FROM rem1; -- can be pushed down +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN --------------------------------------------- Delete on public.rem1 @@ -7829,6 +8191,7 @@ FOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo'); EXPLAIN (verbose, costs off) UPDATE rem1 set f2 = ''; -- can't be pushed down +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------- Update on public.rem1 @@ -7840,6 +8203,7 @@ EXPLAIN (verbose, costs off) DELETE FROM rem1; -- can be pushed down +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN --------------------------------------------- Delete on public.rem1 @@ -7854,6 +8218,7 @@ FOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo'); EXPLAIN (verbose, costs off) UPDATE rem1 set f2 = ''; -- can be pushed down +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ---------------------------------------------------------- Update on public.rem1 @@ -7863,6 +8228,7 @@ EXPLAIN (verbose, costs off) DELETE FROM rem1; -- can't be pushed down +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN --------------------------------------------------------------------- Delete on public.rem1 @@ -7878,6 +8244,7 @@ FOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo'); EXPLAIN (verbose, costs off) UPDATE rem1 set f2 = ''; -- can be pushed down +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ---------------------------------------------------------- Update on public.rem1 @@ -7887,6 +8254,7 @@ EXPLAIN (verbose, costs off) DELETE FROM rem1; -- can't be pushed down +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------ Delete on public.rem1 @@ -7910,8 +8278,11 @@ INSERT INTO a(aa) VALUES('aaaa'); INSERT INTO a(aa) VALUES('aaaaa'); INSERT INTO b(aa) VALUES('bbb'); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree INSERT INTO b(aa) VALUES('bbbb'); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree INSERT INTO b(aa) VALUES('bbbbb'); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree SELECT tableoid::regclass, * FROM a; tableoid | aa ----------+------- @@ -7924,6 +8295,7 @@ (6 rows) SELECT tableoid::regclass, * FROM b; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree tableoid | aa | bb ----------+-------+---- b | bbb | @@ -7952,6 +8324,7 @@ (6 rows) SELECT tableoid::regclass, * FROM b; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree tableoid | aa | bb ----------+-------+---- b | bbb | @@ -7968,6 +8341,7 @@ (3 rows) UPDATE b SET aa = 'new'; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree SELECT tableoid::regclass, * FROM a; tableoid | aa ----------+-------- @@ -7980,6 +8354,7 @@ (6 rows) SELECT tableoid::regclass, * FROM b; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree tableoid | aa | bb ----------+-----+---- b | new | @@ -8008,6 +8383,7 @@ (6 rows) SELECT tableoid::regclass, * FROM b; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree tableoid | aa | bb ----------+--------+---- b | newtoo | @@ -8030,6 +8406,7 @@ (0 rows) SELECT tableoid::regclass, * FROM b; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree tableoid | aa | bb ----------+----+---- (0 rows) @@ -8058,13 +8435,18 @@ insert into foo values(1,1); insert into foo values(3,3); insert into foo2 values(2,2,2); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree insert into foo2 values(4,4,4); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree insert into bar values(1,11); insert into bar values(2,22); insert into bar values(6,66); insert into bar2 values(3,33,33); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree insert into bar2 values(4,44,44); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree insert into bar2 values(7,77,77); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree explain (verbose, costs off) select * from bar where f1 in (select f1 from foo) for update; QUERY PLAN @@ -8150,41 +8532,11 @@ DETAIL: User-specified column moved to the position of the inherited column. explain (verbose, costs off) select * from bar where f1 in (select f1 from foo2) for share; - QUERY PLAN --------------------------------------------------------------------------------------- - LockRows - Output: bar.f1, bar.f2, bar.ctid, foo2.*, bar.*, bar.tableoid, foo2.tableoid - -> Hash Join - Output: bar.f1, bar.f2, bar.ctid, foo2.*, bar.*, bar.tableoid, foo2.tableoid - Inner Unique: true - Hash Cond: (bar.f1 = foo2.f1) - -> Append - -> Seq Scan on public.bar bar_1 - Output: bar_1.f1, bar_1.f2, bar_1.ctid, bar_1.*, bar_1.tableoid - -> Foreign Scan on public.bar2 bar_2 - Output: bar_2.f1, bar_2.f2, bar_2.ctid, bar_2.*, bar_2.tableoid - Remote SQL: SELECT f1, f2, f3, ctid FROM public.loct2 FOR SHARE - -> Hash - Output: foo2.*, foo2.f1, foo2.tableoid - -> HashAggregate - Output: foo2.*, foo2.f1, foo2.tableoid - Group Key: foo2.f1 - -> Append - -> Foreign Scan on public.foo2 foo2_1 - Output: foo2_1.*, foo2_1.f1, foo2_1.tableoid - Remote SQL: SELECT f1, f2, f3 FROM public.loct1 - -> Foreign Scan on public.foo2child foo2_2 - Output: foo2_2.*, foo2_2.f1, foo2_2.tableoid - Remote SQL: SELECT f1, f2, f3 FROM public.loct4 -(24 rows) - +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +ERROR: could not find junk ctid2 column select * from bar where f1 in (select f1 from foo2) for share; - f1 | f2 -----+---- - 2 | 22 - 4 | 44 -(2 rows) - +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +ERROR: could not find junk ctid2 column drop foreign table foo2child; -- And with a local child relation of the foreign table parent create table foo2child (f3 int) inherits (foo2); @@ -8192,6 +8544,7 @@ DETAIL: User-specified column moved to the position of the inherited column. explain (verbose, costs off) select * from bar where f1 in (select f1 from foo2) for share; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------- LockRows @@ -8220,6 +8573,7 @@ (23 rows) select * from bar where f1 in (select f1 from foo2) for share; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree f1 | f2 ----+---- 2 | 22 @@ -8277,53 +8631,23 @@ from ( select f1 from foo union all select f1+3 from foo ) ss where bar.f1 = ss.f1; - QUERY PLAN ------------------------------------------------------------------------------------------------- - Update on public.bar - Update on public.bar bar_1 - Foreign Update on public.bar2 bar_2 - Remote SQL: UPDATE public.loct2 SET f2 = $2 WHERE ctid = $1 - -> Merge Join - Output: (bar.f2 + 100), (ROW(foo.f1)), bar.tableoid, bar.ctid, (NULL::record) - Merge Cond: (bar.f1 = foo.f1) - -> Sort - Output: bar.f2, bar.f1, bar.tableoid, bar.ctid, (NULL::record) - Sort Key: bar.f1 - -> Append - -> Seq Scan on public.bar bar_1 - Output: bar_1.f2, bar_1.f1, bar_1.tableoid, bar_1.ctid, NULL::record - -> Foreign Scan on public.bar2 bar_2 - Output: bar_2.f2, bar_2.f1, bar_2.tableoid, bar_2.ctid, bar_2.* - Remote SQL: SELECT f1, f2, f3, ctid FROM public.loct2 FOR UPDATE - -> Sort - Output: (ROW(foo.f1)), foo.f1 - Sort Key: foo.f1 - -> Append - -> Seq Scan on public.foo - Output: ROW(foo.f1), foo.f1 - -> Foreign Scan on public.foo2 foo_1 - Output: ROW(foo_1.f1), foo_1.f1 - Remote SQL: SELECT f1 FROM public.loct1 - -> Seq Scan on public.foo foo_2 - Output: ROW((foo_2.f1 + 3)), (foo_2.f1 + 3) - -> Foreign Scan on public.foo2 foo_3 - Output: ROW((foo_3.f1 + 3)), (foo_3.f1 + 3) - Remote SQL: SELECT f1 FROM public.loct1 -(30 rows) - +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +ERROR: could not find junk ctid1 column update bar set f2 = f2 + 100 from ( select f1 from foo union all select f1+3 from foo ) ss where bar.f1 = ss.f1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +ERROR: could not find junk ctid1 column select tableoid::regclass, * from bar order by 1,2; tableoid | f1 | f2 ----------+----+----- - bar | 1 | 211 - bar | 2 | 222 - bar | 6 | 166 - bar2 | 3 | 233 - bar2 | 4 | 244 - bar2 | 7 | 177 + bar | 1 | 111 + bar | 2 | 122 + bar | 6 | 66 + bar2 | 3 | 133 + bar2 | 4 | 144 + bar2 | 7 | 77 (6 rows) -- Test forcing the remote server to produce sorted data for a merge join, @@ -8332,7 +8656,9 @@ truncate table only foo; \set num_rows_foo 2000 insert into loct1 select generate_series(0, :num_rows_foo, 2), generate_series(0, :num_rows_foo, 2), generate_series(0, :num_rows_foo, 2); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree insert into foo select generate_series(1, :num_rows_foo, 2), generate_series(1, :num_rows_foo, 2); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree SET enable_hashjoin to false; SET enable_nestloop to false; alter foreign table foo2 options (use_remote_estimate 'true'); @@ -8343,6 +8669,7 @@ -- inner join; expressions in the clauses appear in the equivalence class list explain (verbose, costs off) select foo.f1, loct1.f1 from foo join loct1 on (foo.f1 = loct1.f1) order by foo.f2 offset 10 limit 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN -------------------------------------------------------------------------------------------------- Limit @@ -8365,6 +8692,7 @@ (17 rows) select foo.f1, loct1.f1 from foo join loct1 on (foo.f1 = loct1.f1) order by foo.f2 offset 10 limit 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree f1 | f1 ----+---- 20 | 20 @@ -8383,6 +8711,7 @@ -- list but no output change as compared to the previous query explain (verbose, costs off) select foo.f1, loct1.f1 from foo left join loct1 on (foo.f1 = loct1.f1) order by foo.f2 offset 10 limit 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN -------------------------------------------------------------------------------------------------- Limit @@ -8405,6 +8734,7 @@ (17 rows) select foo.f1, loct1.f1 from foo left join loct1 on (foo.f1 = loct1.f1) order by foo.f2 offset 10 limit 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree f1 | f1 ----+---- 10 | 10 @@ -8425,9 +8755,9 @@ begin; declare c cursor for select * from bar where f1 = 7; fetch from c; - f1 | f2 -----+----- - 7 | 177 + f1 | f2 +----+---- + 7 | 77 (1 row) update bar set f2 = null where current of c; @@ -8479,12 +8809,12 @@ update bar set f2 = f2 + 100 returning *; f1 | f2 ----+----- - 1 | 311 - 2 | 322 - 6 | 266 - 3 | 333 - 4 | 344 - 7 | 277 + 6 | 166 + 1 | 211 + 2 | 222 + 7 | 177 + 3 | 233 + 4 | 244 (6 rows) -- Test that UPDATE/DELETE with inherited target works with row-level triggers @@ -8514,17 +8844,17 @@ update bar set f2 = f2 + 100; NOTICE: trig_row_before(23, skidoo) BEFORE ROW UPDATE ON bar2 -NOTICE: OLD: (3,333,33),NEW: (3,433,33) +NOTICE: OLD: (7,177,77),NEW: (7,277,77) NOTICE: trig_row_before(23, skidoo) BEFORE ROW UPDATE ON bar2 -NOTICE: OLD: (4,344,44),NEW: (4,444,44) +NOTICE: OLD: (3,233,33),NEW: (3,333,33) NOTICE: trig_row_before(23, skidoo) BEFORE ROW UPDATE ON bar2 -NOTICE: OLD: (7,277,77),NEW: (7,377,77) +NOTICE: OLD: (4,244,44),NEW: (4,344,44) NOTICE: trig_row_after(23, skidoo) AFTER ROW UPDATE ON bar2 -NOTICE: OLD: (3,333,33),NEW: (3,433,33) +NOTICE: OLD: (7,177,77),NEW: (7,277,77) NOTICE: trig_row_after(23, skidoo) AFTER ROW UPDATE ON bar2 -NOTICE: OLD: (4,344,44),NEW: (4,444,44) +NOTICE: OLD: (3,233,33),NEW: (3,333,33) NOTICE: trig_row_after(23, skidoo) AFTER ROW UPDATE ON bar2 -NOTICE: OLD: (7,277,77),NEW: (7,377,77) +NOTICE: OLD: (4,244,44),NEW: (4,344,44) explain (verbose, costs off) delete from bar where f2 < 400; QUERY PLAN @@ -8544,9 +8874,17 @@ delete from bar where f2 < 400; NOTICE: trig_row_before(23, skidoo) BEFORE ROW DELETE ON bar2 -NOTICE: OLD: (7,377,77) +NOTICE: OLD: (7,277,77) +NOTICE: trig_row_before(23, skidoo) BEFORE ROW DELETE ON bar2 +NOTICE: OLD: (3,333,33) +NOTICE: trig_row_before(23, skidoo) BEFORE ROW DELETE ON bar2 +NOTICE: OLD: (4,344,44) NOTICE: trig_row_after(23, skidoo) AFTER ROW DELETE ON bar2 -NOTICE: OLD: (7,377,77) +NOTICE: OLD: (7,277,77) +NOTICE: trig_row_after(23, skidoo) AFTER ROW DELETE ON bar2 +NOTICE: OLD: (3,333,33) +NOTICE: trig_row_after(23, skidoo) AFTER ROW DELETE ON bar2 +NOTICE: OLD: (4,344,44) -- cleanup drop table foo cascade; NOTICE: drop cascades to foreign table foo2 @@ -8564,75 +8902,29 @@ server loopback options (table_name 'loct2'); alter foreign table remt1 inherit parent; insert into remt1 values (1, 'foo'); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree insert into remt1 values (2, 'bar'); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree insert into remt2 values (1, 'foo'); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree insert into remt2 values (2, 'bar'); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree analyze remt1; analyze remt2; explain (verbose, costs off) update parent set b = parent.b || remt2.b from remt2 where parent.a = remt2.a returning *; - QUERY PLAN ----------------------------------------------------------------------------------------------------------------- - Update on public.parent - Output: parent_1.a, parent_1.b, remt2.a, remt2.b - Update on public.parent parent_1 - Foreign Update on public.remt1 parent_2 - Remote SQL: UPDATE public.loct1 SET b = $2 WHERE ctid = $1 RETURNING a, b - -> Nested Loop - Output: (parent.b || remt2.b), remt2.*, remt2.a, remt2.b, parent.tableoid, parent.ctid, (NULL::record) - Join Filter: (parent.a = remt2.a) - -> Append - -> Seq Scan on public.parent parent_1 - Output: parent_1.b, parent_1.a, parent_1.tableoid, parent_1.ctid, NULL::record - -> Foreign Scan on public.remt1 parent_2 - Output: parent_2.b, parent_2.a, parent_2.tableoid, parent_2.ctid, parent_2.* - Remote SQL: SELECT a, b, ctid FROM public.loct1 FOR UPDATE - -> Materialize - Output: remt2.b, remt2.*, remt2.a - -> Foreign Scan on public.remt2 - Output: remt2.b, remt2.*, remt2.a - Remote SQL: SELECT a, b FROM public.loct2 -(19 rows) - +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +ERROR: could not find junk ctid1 column update parent set b = parent.b || remt2.b from remt2 where parent.a = remt2.a returning *; - a | b | a | b ----+--------+---+----- - 1 | foofoo | 1 | foo - 2 | barbar | 2 | bar -(2 rows) - +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +ERROR: could not find junk ctid1 column explain (verbose, costs off) delete from parent using remt2 where parent.a = remt2.a returning parent; - QUERY PLAN ------------------------------------------------------------------------------ - Delete on public.parent - Output: parent_1.* - Delete on public.parent parent_1 - Foreign Delete on public.remt1 parent_2 - Remote SQL: DELETE FROM public.loct1 WHERE ctid = $1 RETURNING a, b - -> Nested Loop - Output: remt2.*, parent.tableoid, parent.ctid - Join Filter: (parent.a = remt2.a) - -> Append - -> Seq Scan on public.parent parent_1 - Output: parent_1.a, parent_1.tableoid, parent_1.ctid - -> Foreign Scan on public.remt1 parent_2 - Output: parent_2.a, parent_2.tableoid, parent_2.ctid - Remote SQL: SELECT a, ctid FROM public.loct1 FOR UPDATE - -> Materialize - Output: remt2.*, remt2.a - -> Foreign Scan on public.remt2 - Output: remt2.*, remt2.a - Remote SQL: SELECT a, b FROM public.loct2 -(19 rows) - +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +ERROR: could not find junk ctid1 column delete from parent using remt2 where parent.a = remt2.a returning parent; - parent ------------- - (1,foofoo) - (2,barbar) -(2 rows) - +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +ERROR: could not find junk ctid1 column -- cleanup drop foreign table remt1; drop foreign table remt2; @@ -8665,6 +8957,7 @@ (1 row) insert into itrtest values (1, 'test1'), (2, 'test2') returning *; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree a | b ---+------- 1 | test1 @@ -8683,6 +8976,7 @@ (6 rows) select tableoid::regclass, * FROM remp1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree tableoid | a | b ----------+---+------- remp1 | 1 | foo @@ -8691,6 +8985,7 @@ (3 rows) select tableoid::regclass, * FROM remp2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree tableoid | b | a ----------+-------+--- remp2 | baz | 2 @@ -8702,6 +8997,7 @@ -- MERGE ought to fail cleanly merge into itrtest using (select 1, 'foo') as source on (true) when matched then do nothing; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ERROR: cannot execute MERGE on relation "remp1" DETAIL: This operation is not supported for foreign tables. create unique index loct1_idx on loct1 (a); @@ -8755,6 +9051,7 @@ (1 row) insert into itrtest values (1, 'test1'), (2, 'test2') returning *; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree a | b ---+------------------- 1 | test1 triggered ! @@ -8762,6 +9059,7 @@ (2 rows) with result as (insert into itrtest values (1, 'test1'), (2, 'test2') returning *) select * from result; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree a | b ---+------------------- 1 | test1 triggered ! @@ -8790,6 +9088,7 @@ (2 rows) select tableoid::regclass, * FROM remp; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree tableoid | a | b ----------+---+----- remp | 1 | foo @@ -8817,6 +9116,7 @@ (2 rows) select tableoid::regclass, * FROM remp; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree tableoid | a | b ----------+---+----- remp | 1 | foo @@ -8908,30 +9208,11 @@ -- with a non-direct modification plan explain (verbose, costs off) update utrtest set a = 1 from (values (1), (2)) s(x) where a = s.x returning *; - QUERY PLAN ------------------------------------------------------------------------------------------------- - Update on public.utrtest - Output: utrtest_1.a, utrtest_1.b, "*VALUES*".column1 - Foreign Update on public.remp utrtest_1 - Remote SQL: UPDATE public.loct SET a = $2 WHERE ctid = $1 RETURNING a, b - Update on public.locp utrtest_2 - -> Hash Join - Output: 1, "*VALUES*".*, "*VALUES*".column1, utrtest.tableoid, utrtest.ctid, utrtest.* - Hash Cond: (utrtest.a = "*VALUES*".column1) - -> Append - -> Foreign Scan on public.remp utrtest_1 - Output: utrtest_1.a, utrtest_1.tableoid, utrtest_1.ctid, utrtest_1.* - Remote SQL: SELECT a, b, ctid FROM public.loct FOR UPDATE - -> Seq Scan on public.locp utrtest_2 - Output: utrtest_2.a, utrtest_2.tableoid, utrtest_2.ctid, NULL::record - -> Hash - Output: "*VALUES*".*, "*VALUES*".column1 - -> Values Scan on "*VALUES*" - Output: "*VALUES*".*, "*VALUES*".column1 -(18 rows) - +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +ERROR: could not find junk ctid1 column update utrtest set a = 1 from (values (1), (2)) s(x) where a = s.x returning *; -ERROR: cannot route tuples into foreign table to be updated "remp" +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +ERROR: could not find junk ctid1 column -- Change the definition of utrtest so that the foreign partition get updated -- after the local partition delete from utrtest; @@ -8965,30 +9246,11 @@ -- with a non-direct modification plan explain (verbose, costs off) update utrtest set a = 3 from (values (2), (3)) s(x) where a = s.x returning *; - QUERY PLAN ------------------------------------------------------------------------------------------------------ - Update on public.utrtest - Output: utrtest_1.a, utrtest_1.b, "*VALUES*".column1 - Update on public.locp utrtest_1 - Foreign Update on public.remp utrtest_2 - Remote SQL: UPDATE public.loct SET a = $2 WHERE ctid = $1 RETURNING a, b - -> Hash Join - Output: 3, "*VALUES*".*, "*VALUES*".column1, utrtest.tableoid, utrtest.ctid, (NULL::record) - Hash Cond: (utrtest.a = "*VALUES*".column1) - -> Append - -> Seq Scan on public.locp utrtest_1 - Output: utrtest_1.a, utrtest_1.tableoid, utrtest_1.ctid, NULL::record - -> Foreign Scan on public.remp utrtest_2 - Output: utrtest_2.a, utrtest_2.tableoid, utrtest_2.ctid, utrtest_2.* - Remote SQL: SELECT a, b, ctid FROM public.loct FOR UPDATE - -> Hash - Output: "*VALUES*".*, "*VALUES*".column1 - -> Values Scan on "*VALUES*" - Output: "*VALUES*".*, "*VALUES*".column1 -(18 rows) - +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +ERROR: could not find junk ctid1 column update utrtest set a = 3 from (values (2), (3)) s(x) where a = s.x returning *; -- ERROR -ERROR: cannot route tuples into foreign table to be updated "remp" +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +ERROR: could not find junk ctid1 column drop table utrtest; drop table loct; -- Test copy tuple routing @@ -9008,12 +9270,14 @@ (2 rows) select tableoid::regclass, * FROM remp1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree tableoid | a | b ----------+---+----- remp1 | 1 | foo (1 row) select tableoid::regclass, * FROM remp2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree tableoid | b | a ----------+-----+--- remp2 | qux | 2 @@ -9022,6 +9286,7 @@ -- Copying into foreign partitions directly should work as well copy remp1 from stdin; select tableoid::regclass, * FROM remp1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree tableoid | a | b ----------+---+----- remp1 | 1 | foo @@ -9044,6 +9309,7 @@ (6 rows) select tableoid::regclass, * FROM remp1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree tableoid | a | b ----------+---+------- remp1 | 1 | foo @@ -9052,6 +9318,7 @@ (3 rows) select tableoid::regclass, * FROM remp2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree tableoid | b | a ----------+-------+--- remp2 | baz | 2 @@ -9073,6 +9340,7 @@ -- Test basic functionality copy rem2 from stdin; select * from rem2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree f1 | f2 ----+----- 1 | foo @@ -9080,6 +9348,7 @@ (2 rows) delete from rem2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree -- Test check constraints alter table loc2 add constraint loc2_f1positive check (f1 >= 0); alter foreign table rem2 add constraint rem2_f1positive check (f1 >= 0); @@ -9091,6 +9360,7 @@ CONTEXT: remote SQL command: INSERT INTO public.loc2(f1, f2) VALUES ($1, $2) COPY rem2, line 1: "-1 xyzzy" select * from rem2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree f1 | f2 ----+----- 1 | foo @@ -9100,6 +9370,7 @@ alter foreign table rem2 drop constraint rem2_f1positive; alter table loc2 drop constraint loc2_f1positive; delete from rem2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree -- Test local triggers create trigger trig_stmt_before before insert on rem2 for each statement execute procedure trigger_func(); @@ -9121,6 +9392,7 @@ NOTICE: NEW: (2,bar) NOTICE: trigger_func() called: action = INSERT, when = AFTER, level = STATEMENT select * from rem2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree f1 | f2 ----+----- 1 | foo @@ -9132,11 +9404,13 @@ drop trigger trig_stmt_before on rem2; drop trigger trig_stmt_after on rem2; delete from rem2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree create trigger trig_row_before_insert before insert on rem2 for each row execute procedure trig_row_before_insupdate(); -- The new values are concatenated with ' triggered !' copy rem2 from stdin; select * from rem2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree f1 | f2 ----+----------------- 1 | foo triggered ! @@ -9145,23 +9419,27 @@ drop trigger trig_row_before_insert on rem2; delete from rem2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree create trigger trig_null before insert on rem2 for each row execute procedure trig_null(); -- Nothing happens copy rem2 from stdin; select * from rem2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree f1 | f2 ----+---- (0 rows) drop trigger trig_null on rem2; delete from rem2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree -- Test remote triggers create trigger trig_row_before_insert before insert on loc2 for each row execute procedure trig_row_before_insupdate(); -- The new values are concatenated with ' triggered !' copy rem2 from stdin; select * from rem2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree f1 | f2 ----+----------------- 1 | foo triggered ! @@ -9170,17 +9448,20 @@ drop trigger trig_row_before_insert on loc2; delete from rem2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree create trigger trig_null before insert on loc2 for each row execute procedure trig_null(); -- Nothing happens copy rem2 from stdin; select * from rem2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree f1 | f2 ----+---- (0 rows) drop trigger trig_null on loc2; delete from rem2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree -- Test a combination of local and remote triggers create trigger rem2_trig_row_before before insert on rem2 for each row execute procedure trigger_data(23,'skidoo'); @@ -9198,6 +9479,7 @@ NOTICE: rem2_trig_row_after(23, skidoo) AFTER ROW INSERT ON rem2 NOTICE: NEW: (2,"bar triggered !") select * from rem2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree f1 | f2 ----+----------------- 1 | foo triggered ! @@ -9208,6 +9490,7 @@ drop trigger rem2_trig_row_after on rem2; drop trigger loc2_trig_row_before_insert on loc2; delete from rem2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree -- test COPY FROM with foreign table created in the same transaction create table loc3 (f1 int, f2 text); begin; @@ -9216,6 +9499,7 @@ copy rem3 from stdin; commit; select * from rem3; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree f1 | f2 ----+----- 1 | foo @@ -9229,6 +9513,7 @@ -- Test basic functionality copy rem2 from stdin; select * from rem2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree f1 | f2 ----+----- 1 | foo @@ -9237,6 +9522,7 @@ (3 rows) delete from rem2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree -- Test check constraints alter table loc2 add constraint loc2_f1positive check (f1 >= 0); alter foreign table rem2 add constraint rem2_f1positive check (f1 >= 0); @@ -9248,6 +9534,7 @@ CONTEXT: remote SQL command: INSERT INTO public.loc2(f1, f2) VALUES ($1, $2) COPY rem2 select * from rem2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree f1 | f2 ----+----- 1 | foo @@ -9258,12 +9545,14 @@ alter foreign table rem2 drop constraint rem2_f1positive; alter table loc2 drop constraint loc2_f1positive; delete from rem2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree -- Test remote triggers create trigger trig_row_before_insert before insert on loc2 for each row execute procedure trig_row_before_insupdate(); -- The new values are concatenated with ' triggered !' copy rem2 from stdin; select * from rem2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree f1 | f2 ----+----------------- 1 | foo triggered ! @@ -9273,17 +9562,20 @@ drop trigger trig_row_before_insert on loc2; delete from rem2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree create trigger trig_null before insert on loc2 for each row execute procedure trig_null(); -- Nothing happens copy rem2 from stdin; select * from rem2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree f1 | f2 ----+---- (0 rows) drop trigger trig_null on loc2; delete from rem2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree -- Check with zero-column foreign table; batch insert will be disabled alter table loc2 drop column f1; alter table loc2 drop column f2; @@ -9291,10 +9583,12 @@ alter table rem2 drop column f2; copy rem2 from stdin; select * from rem2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree -- (3 rows) delete from rem2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree alter server loopback options (drop batch_size); -- =================================================================== -- test for TRUNCATE @@ -9303,6 +9597,7 @@ CREATE FOREIGN TABLE tru_ftable (id int) SERVER loopback OPTIONS (table_name 'tru_rtable0'); INSERT INTO tru_rtable0 (SELECT x FROM generate_series(1,10) x); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree CREATE TABLE tru_ptable (id int) PARTITION BY HASH(id); CREATE TABLE tru_ptable__p0 PARTITION OF tru_ptable FOR VALUES WITH (MODULUS 2, REMAINDER 0); @@ -9311,10 +9606,13 @@ FOR VALUES WITH (MODULUS 2, REMAINDER 1) SERVER loopback OPTIONS (table_name 'tru_rtable1'); INSERT INTO tru_ptable (SELECT x FROM generate_series(11,20) x); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree CREATE TABLE tru_pk_table(id int primary key); CREATE TABLE tru_fk_table(fkey int references tru_pk_table(id)); INSERT INTO tru_pk_table (SELECT x FROM generate_series(1,10) x); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree INSERT INTO tru_fk_table (SELECT x % 10 + 1 FROM generate_series(5,25) x); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree CREATE FOREIGN TABLE tru_pk_ftable (id int) SERVER loopback OPTIONS (table_name 'tru_pk_table'); CREATE TABLE tru_rtable_parent (id int); @@ -9324,9 +9622,12 @@ CREATE FOREIGN TABLE tru_ftable_child () INHERITS (tru_ftable_parent) SERVER loopback OPTIONS (table_name 'tru_rtable_child'); INSERT INTO tru_rtable_parent (SELECT x FROM generate_series(1,8) x); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree INSERT INTO tru_rtable_child (SELECT x FROM generate_series(10, 18) x); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree -- normal truncate SELECT sum(id) FROM tru_ftable; -- 55 +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree sum ----- 55 @@ -9340,6 +9641,7 @@ (1 row) SELECT count(*) FROM tru_ftable; -- 0 +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree count ------- 0 @@ -9381,6 +9683,7 @@ (1 row) SELECT count(*) FROM tru_ftable__p1; -- 0 +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree count ------- 0 @@ -9394,6 +9697,7 @@ -- 'CASCADE' option SELECT sum(id) FROM tru_pk_ftable; -- 55 +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree sum ----- 55 @@ -9406,6 +9710,7 @@ CONTEXT: remote SQL command: TRUNCATE public.tru_pk_table CONTINUE IDENTITY RESTRICT TRUNCATE tru_pk_ftable CASCADE; SELECT count(*) FROM tru_pk_ftable; -- 0 +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree count ------- 0 @@ -9419,14 +9724,18 @@ -- truncate two tables at a command INSERT INTO tru_ftable (SELECT x FROM generate_series(1,8) x); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree INSERT INTO tru_pk_ftable (SELECT x FROM generate_series(3,10) x); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree SELECT count(*) from tru_ftable; -- 8 +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree count ------- 8 (1 row) SELECT count(*) from tru_pk_ftable; -- 8 +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree count ------- 8 @@ -9434,12 +9743,14 @@ TRUNCATE tru_ftable, tru_pk_ftable CASCADE; SELECT count(*) from tru_ftable; -- 0 +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree count ------- 0 (1 row) SELECT count(*) from tru_pk_ftable; -- 0 +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree count ------- 0 @@ -9450,6 +9761,7 @@ -- tru_ftable_parent locally is not truncated. TRUNCATE ONLY tru_ftable_parent; SELECT sum(id) FROM tru_ftable_parent; -- 126 +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree sum ----- 126 @@ -9457,6 +9769,7 @@ TRUNCATE tru_ftable_parent; SELECT count(*) FROM tru_ftable_parent; -- 0 +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree count ------- 0 @@ -9465,8 +9778,11 @@ -- in case when remote table has inherited children CREATE TABLE tru_rtable0_child () INHERITS (tru_rtable0); INSERT INTO tru_rtable0 (SELECT x FROM generate_series(5,9) x); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree INSERT INTO tru_rtable0_child (SELECT x FROM generate_series(10,14) x); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree SELECT sum(id) FROM tru_ftable; -- 95 +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree sum ----- 95 @@ -9477,14 +9793,18 @@ -- when truncating a foreign table. TRUNCATE ONLY tru_ftable; SELECT count(*) FROM tru_ftable; -- 0 +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree count ------- 0 (1 row) INSERT INTO tru_rtable0 (SELECT x FROM generate_series(21,25) x); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree INSERT INTO tru_rtable0_child (SELECT x FROM generate_series(26,30) x); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree SELECT sum(id) FROM tru_ftable; -- 255 +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree sum ----- 255 @@ -9492,6 +9812,7 @@ TRUNCATE tru_ftable; -- truncate both of parent and child SELECT count(*) FROM tru_ftable; -- 0 +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree count ------- 0 @@ -9521,6 +9842,7 @@ CREATE SCHEMA import_dest1; IMPORT FOREIGN SCHEMA import_source FROM SERVER loopback INTO import_dest1; \det+ import_dest1.* +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree List of foreign tables Schema | Table | Server | FDW options | Description --------------+-------+----------+-------------------------------------------------+------------- @@ -9534,6 +9856,12 @@ (7 rows) \d import_dest1.* +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree Foreign table "import_dest1.t1" Column | Type | Collation | Nullable | Default | FDW options --------+-------------------+-----------+----------+---------+-------------------- @@ -9542,6 +9870,11 @@ Server: loopback FDW options: (schema_name 'import_source', table_name 't1') +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree Foreign table "import_dest1.t2" Column | Type | Collation | Nullable | Default | FDW options --------+-------------------+-----------+----------+---------+-------------------- @@ -9551,6 +9884,11 @@ Server: loopback FDW options: (schema_name 'import_source', table_name 't2') +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree Foreign table "import_dest1.t3" Column | Type | Collation | Nullable | Default | FDW options --------+--------------------------+-----------+----------+---------+-------------------- @@ -9559,6 +9897,11 @@ Server: loopback FDW options: (schema_name 'import_source', table_name 't3') +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree Foreign table "import_dest1.t4" Column | Type | Collation | Nullable | Default | FDW options --------+---------+-----------+----------+---------+-------------------- @@ -9566,6 +9909,11 @@ Server: loopback FDW options: (schema_name 'import_source', table_name 't4') +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree Foreign table "import_dest1.x 4" Column | Type | Collation | Nullable | Default | FDW options --------+-----------------------+-----------+----------+---------+--------------------- @@ -9575,12 +9923,22 @@ Server: loopback FDW options: (schema_name 'import_source', table_name 'x 4') +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree Foreign table "import_dest1.x 5" Column | Type | Collation | Nullable | Default | FDW options --------+------+-----------+----------+---------+------------- Server: loopback FDW options: (schema_name 'import_source', table_name 'x 5') +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree Foreign table "import_dest1.x 6" Column | Type | Collation | Nullable | Default | FDW options --------+---------+-----------+----------+-------------------------------------+-------------------- @@ -9594,6 +9952,7 @@ IMPORT FOREIGN SCHEMA import_source FROM SERVER loopback INTO import_dest2 OPTIONS (import_default 'true'); \det+ import_dest2.* +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree List of foreign tables Schema | Table | Server | FDW options | Description --------------+-------+----------+-------------------------------------------------+------------- @@ -9607,6 +9966,12 @@ (7 rows) \d import_dest2.* +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree Foreign table "import_dest2.t1" Column | Type | Collation | Nullable | Default | FDW options --------+-------------------+-----------+----------+---------+-------------------- @@ -9615,6 +9980,11 @@ Server: loopback FDW options: (schema_name 'import_source', table_name 't1') +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree Foreign table "import_dest2.t2" Column | Type | Collation | Nullable | Default | FDW options --------+-------------------+-----------+----------+---------+-------------------- @@ -9624,6 +9994,11 @@ Server: loopback FDW options: (schema_name 'import_source', table_name 't2') +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree Foreign table "import_dest2.t3" Column | Type | Collation | Nullable | Default | FDW options --------+--------------------------+-----------+----------+---------+-------------------- @@ -9632,6 +10007,11 @@ Server: loopback FDW options: (schema_name 'import_source', table_name 't3') +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree Foreign table "import_dest2.t4" Column | Type | Collation | Nullable | Default | FDW options --------+---------+-----------+----------+---------+-------------------- @@ -9639,6 +10019,11 @@ Server: loopback FDW options: (schema_name 'import_source', table_name 't4') +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree Foreign table "import_dest2.x 4" Column | Type | Collation | Nullable | Default | FDW options --------+-----------------------+-----------+----------+---------+--------------------- @@ -9648,12 +10033,22 @@ Server: loopback FDW options: (schema_name 'import_source', table_name 'x 4') +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree Foreign table "import_dest2.x 5" Column | Type | Collation | Nullable | Default | FDW options --------+------+-----------+----------+---------+------------- Server: loopback FDW options: (schema_name 'import_source', table_name 'x 5') +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree Foreign table "import_dest2.x 6" Column | Type | Collation | Nullable | Default | FDW options --------+---------+-----------+----------+-------------------------------------+-------------------- @@ -9666,6 +10061,7 @@ IMPORT FOREIGN SCHEMA import_source FROM SERVER loopback INTO import_dest3 OPTIONS (import_collate 'false', import_generated 'false', import_not_null 'false'); \det+ import_dest3.* +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree List of foreign tables Schema | Table | Server | FDW options | Description --------------+-------+----------+-------------------------------------------------+------------- @@ -9679,6 +10075,12 @@ (7 rows) \d import_dest3.* +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree Foreign table "import_dest3.t1" Column | Type | Collation | Nullable | Default | FDW options --------+-------------------+-----------+----------+---------+-------------------- @@ -9687,6 +10089,11 @@ Server: loopback FDW options: (schema_name 'import_source', table_name 't1') +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree Foreign table "import_dest3.t2" Column | Type | Collation | Nullable | Default | FDW options --------+-------------------+-----------+----------+---------+-------------------- @@ -9696,6 +10103,11 @@ Server: loopback FDW options: (schema_name 'import_source', table_name 't2') +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree Foreign table "import_dest3.t3" Column | Type | Collation | Nullable | Default | FDW options --------+--------------------------+-----------+----------+---------+-------------------- @@ -9704,6 +10116,11 @@ Server: loopback FDW options: (schema_name 'import_source', table_name 't3') +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree Foreign table "import_dest3.t4" Column | Type | Collation | Nullable | Default | FDW options --------+---------+-----------+----------+---------+-------------------- @@ -9711,6 +10128,11 @@ Server: loopback FDW options: (schema_name 'import_source', table_name 't4') +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree Foreign table "import_dest3.x 4" Column | Type | Collation | Nullable | Default | FDW options --------+-----------------------+-----------+----------+---------+--------------------- @@ -9720,12 +10142,22 @@ Server: loopback FDW options: (schema_name 'import_source', table_name 'x 4') +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree Foreign table "import_dest3.x 5" Column | Type | Collation | Nullable | Default | FDW options --------+------+-----------+----------+---------+------------- Server: loopback FDW options: (schema_name 'import_source', table_name 'x 5') +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree Foreign table "import_dest3.x 6" Column | Type | Collation | Nullable | Default | FDW options --------+---------+-----------+----------+---------+-------------------- @@ -9739,6 +10171,7 @@ IMPORT FOREIGN SCHEMA import_source LIMIT TO (t1, nonesuch, t4_part) FROM SERVER loopback INTO import_dest4; \det+ import_dest4.* +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree List of foreign tables Schema | Table | Server | FDW options | Description --------------+---------+----------+-----------------------------------------------------+------------- @@ -9749,6 +10182,7 @@ IMPORT FOREIGN SCHEMA import_source EXCEPT (t1, "x 4", nonesuch, t4_part) FROM SERVER loopback INTO import_dest4; \det+ import_dest4.* +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree List of foreign tables Schema | Table | Server | FDW options | Description --------------+---------+----------+-----------------------------------------------------+------------- @@ -9862,7 +10296,9 @@ ALTER TABLE fprt1_p1 SET (autovacuum_enabled = 'false'); ALTER TABLE fprt1_p2 SET (autovacuum_enabled = 'false'); INSERT INTO fprt1_p1 SELECT i, i, to_char(i/50, 'FM0000') FROM generate_series(0, 249, 2) i; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree INSERT INTO fprt1_p2 SELECT i, i, to_char(i/50, 'FM0000') FROM generate_series(250, 499, 2) i; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree CREATE FOREIGN TABLE ftprt1_p1 PARTITION OF fprt1 FOR VALUES FROM (0) TO (250) SERVER loopback OPTIONS (table_name 'fprt1_p1', use_remote_estimate 'true'); CREATE FOREIGN TABLE ftprt1_p2 PARTITION OF fprt1 FOR VALUES FROM (250) TO (500) @@ -9876,7 +10312,9 @@ ALTER TABLE fprt2_p1 SET (autovacuum_enabled = 'false'); ALTER TABLE fprt2_p2 SET (autovacuum_enabled = 'false'); INSERT INTO fprt2_p1 SELECT i, i, to_char(i/50, 'FM0000') FROM generate_series(0, 249, 3) i; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree INSERT INTO fprt2_p2 SELECT i, i, to_char(i/50, 'FM0000') FROM generate_series(250, 499, 3) i; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree CREATE FOREIGN TABLE ftprt2_p1 (b int, c varchar, a int) SERVER loopback OPTIONS (table_name 'fprt2_p1', use_remote_estimate 'true'); ALTER TABLE fprt2 ATTACH PARTITION ftprt2_p1 FOR VALUES FROM (0) TO (250); @@ -9888,6 +10326,7 @@ -- inner join three tables EXPLAIN (COSTS OFF) SELECT t1.a,t2.b,t3.c FROM fprt1 t1 INNER JOIN fprt2 t2 ON (t1.a = t2.b) INNER JOIN fprt1 t3 ON (t2.b = t3.a) WHERE t1.a % 25 =0 ORDER BY 1,2,3; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ----------------------------------------------------------------------------------------------------- Sort @@ -9900,6 +10339,7 @@ (7 rows) SELECT t1.a,t2.b,t3.c FROM fprt1 t1 INNER JOIN fprt2 t2 ON (t1.a = t2.b) INNER JOIN fprt1 t3 ON (t2.b = t3.a) WHERE t1.a % 25 =0 ORDER BY 1,2,3; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree a | b | c -----+-----+------ 0 | 0 | 0000 @@ -9911,6 +10351,7 @@ -- left outer join + nullable clause EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.a,t2.b,t2.c FROM fprt1 t1 LEFT JOIN (SELECT * FROM fprt2 WHERE a < 10) t2 ON (t1.a = t2.b and t1.b = t2.a) WHERE t1.a < 10 ORDER BY 1,2,3; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan @@ -9920,6 +10361,7 @@ (4 rows) SELECT t1.a,t2.b,t2.c FROM fprt1 t1 LEFT JOIN (SELECT * FROM fprt2 WHERE a < 10) t2 ON (t1.a = t2.b and t1.b = t2.a) WHERE t1.a < 10 ORDER BY 1,2,3; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree a | b | c ---+---+------ 0 | 0 | 0000 @@ -9932,6 +10374,7 @@ -- with whole-row reference; partitionwise join does not apply EXPLAIN (COSTS OFF) SELECT t1.wr, t2.wr FROM (SELECT t1 wr, a FROM fprt1 t1 WHERE t1.a % 25 = 0) t1 FULL JOIN (SELECT t2 wr, b FROM fprt2 t2 WHERE t2.b % 25 = 0) t2 ON (t1.a = t2.b) ORDER BY 1,2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN -------------------------------------------------------- Sort @@ -9948,6 +10391,7 @@ (11 rows) SELECT t1.wr, t2.wr FROM (SELECT t1 wr, a FROM fprt1 t1 WHERE t1.a % 25 = 0) t1 FULL JOIN (SELECT t2 wr, b FROM fprt2 t2 WHERE t2.b % 25 = 0) t2 ON (t1.a = t2.b) ORDER BY 1,2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree wr | wr ----------------+---------------- (0,0,0000) | (0,0,0000) @@ -9969,6 +10413,7 @@ -- join with lateral reference EXPLAIN (COSTS OFF) SELECT t1.a,t1.b FROM fprt1 t1, LATERAL (SELECT t2.a, t2.b FROM fprt2 t2 WHERE t1.a = t2.b AND t1.b = t2.a) q WHERE t1.a%25 = 0 ORDER BY 1,2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ----------------------------------------------------------------------- Sort @@ -9981,6 +10426,7 @@ (7 rows) SELECT t1.a,t1.b FROM fprt1 t1, LATERAL (SELECT t2.a, t2.b FROM fprt2 t2 WHERE t1.a = t2.b AND t1.b = t2.a) q WHERE t1.a%25 = 0 ORDER BY 1,2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree a | b -----+----- 0 | 0 @@ -9992,6 +10438,7 @@ -- with PHVs, partitionwise join selected but no join pushdown EXPLAIN (COSTS OFF) SELECT t1.a, t1.phv, t2.b, t2.phv FROM (SELECT 't1_phv' phv, * FROM fprt1 WHERE a % 25 = 0) t1 FULL JOIN (SELECT 't2_phv' phv, * FROM fprt2 WHERE b % 25 = 0) t2 ON (t1.a = t2.b) ORDER BY t1.a, t2.b; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ----------------------------------------------------------- Sort @@ -10010,6 +10457,7 @@ (13 rows) SELECT t1.a, t1.phv, t2.b, t2.phv FROM (SELECT 't1_phv' phv, * FROM fprt1 WHERE a % 25 = 0) t1 FULL JOIN (SELECT 't2_phv' phv, * FROM fprt2 WHERE b % 25 = 0) t2 ON (t1.a = t2.b) ORDER BY t1.a, t2.b; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree a | phv | b | phv -----+--------+-----+-------- 0 | t1_phv | 0 | t2_phv @@ -10031,6 +10479,7 @@ -- test FOR UPDATE; partitionwise join does not apply EXPLAIN (COSTS OFF) SELECT t1.a, t2.b FROM fprt1 t1 INNER JOIN fprt2 t2 ON (t1.a = t2.b) WHERE t1.a % 25 = 0 ORDER BY 1,2 FOR UPDATE OF t1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN -------------------------------------------------------- LockRows @@ -10046,6 +10495,7 @@ (10 rows) SELECT t1.a, t2.b FROM fprt1 t1 INNER JOIN fprt2 t2 ON (t1.a = t2.b) WHERE t1.a % 25 = 0 ORDER BY 1,2 FOR UPDATE OF t1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree a | b -----+----- 0 | 0 @@ -10063,8 +10513,11 @@ CREATE TABLE pagg_tab_p2 (LIKE pagg_tab); CREATE TABLE pagg_tab_p3 (LIKE pagg_tab); INSERT INTO pagg_tab_p1 SELECT i % 30, i % 50, to_char(i/30, 'FM0000') FROM generate_series(1, 3000) i WHERE (i % 30) < 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree INSERT INTO pagg_tab_p2 SELECT i % 30, i % 50, to_char(i/30, 'FM0000') FROM generate_series(1, 3000) i WHERE (i % 30) < 20 and (i % 30) >= 10; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree INSERT INTO pagg_tab_p3 SELECT i % 30, i % 50, to_char(i/30, 'FM0000') FROM generate_series(1, 3000) i WHERE (i % 30) < 30 and (i % 30) >= 20; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree -- Create foreign partitions CREATE FOREIGN TABLE fpagg_tab_p1 PARTITION OF pagg_tab FOR VALUES FROM (0) TO (10) SERVER loopback OPTIONS (table_name 'pagg_tab_p1'); CREATE FOREIGN TABLE fpagg_tab_p2 PARTITION OF pagg_tab FOR VALUES FROM (10) TO (20) SERVER loopback OPTIONS (table_name 'pagg_tab_p2'); @@ -10216,6 +10669,7 @@ c8 user_enum ) SERVER loopback_nopw OPTIONS (schema_name 'public', table_name 'ft1'); SELECT 1 FROM ft1_nopw LIMIT 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ERROR: password or GSSAPI delegated credentials required DETAIL: Non-superusers must delegate GSSAPI credentials or provide a password in the user mapping. -- If we add a password to the connstr it'll fail, because we don't allow passwords @@ -10229,6 +10683,7 @@ -- This won't work with installcheck, but neither will most of the FDW checks. ALTER USER MAPPING FOR CURRENT_USER SERVER loopback_nopw OPTIONS (ADD password 'dummypw'); SELECT 1 FROM ft1_nopw LIMIT 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ERROR: password or GSSAPI delegated credentials required DETAIL: Non-superuser cannot connect if the server does not request a password or use GSSAPI with delegated credentials. HINT: Target server's authentication method must be changed or password_required=false set in the user mapping attributes. @@ -10237,6 +10692,7 @@ ERROR: password_required=false is superuser-only HINT: User mappings with the password_required option set to false may only be created or modified by the superuser. SELECT 1 FROM ft1_nopw LIMIT 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ERROR: password or GSSAPI delegated credentials required DETAIL: Non-superuser cannot connect if the server does not request a password or use GSSAPI with delegated credentials. HINT: Target server's authentication method must be changed or password_required=false set in the user mapping attributes. @@ -10246,6 +10702,7 @@ SET ROLE regress_nosuper; -- Should finally work now SELECT 1 FROM ft1_nopw LIMIT 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ?column? ---------- 1 @@ -10266,12 +10723,14 @@ -- This will fail again as it'll resolve the user mapping for public, which -- lacks password_required=false SELECT 1 FROM ft1_nopw LIMIT 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ERROR: password or GSSAPI delegated credentials required DETAIL: Non-superusers must delegate GSSAPI credentials or provide a password in the user mapping. RESET ROLE; -- The user mapping for public is passwordless and lacks the password_required=false -- mapping option, but will work because the current user is a superuser. SELECT 1 FROM ft1_nopw LIMIT 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ?column? ---------- 1 @@ -10286,9 +10745,10 @@ -- Two-phase transactions are not supported. BEGIN; SELECT count(*) FROM ft1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree count ------- - 822 + 925 (1 row) -- error here @@ -10304,6 +10764,7 @@ ALTER SERVER loopback OPTIONS (application_name 'fdw_retry_check'); -- Make sure we have a remote connection. SELECT 1 FROM ft1 LIMIT 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ?column? ---------- 1 @@ -10316,10 +10777,12 @@ PERFORM pg_terminate_backend(pid, 180000) FROM pg_stat_activity WHERE application_name = 'fdw_retry_check'; END $$; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree -- This query should detect the broken connection when starting new remote -- transaction, reestablish new connection, and then succeed. BEGIN; SELECT 1 FROM ft1 LIMIT 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ?column? ---------- 1 @@ -10332,10 +10795,12 @@ PERFORM pg_terminate_backend(pid, 180000) FROM pg_stat_activity WHERE application_name = 'fdw_retry_check'; END $$; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree SAVEPOINT s; -- The text of the error might vary across platforms, so only show SQLSTATE. \set VERBOSITY sqlstate SELECT 1 FROM ft1 LIMIT 1; -- should fail +WARNING: 01000 ERROR: 08006 \set VERBOSITY default COMMIT; @@ -10344,6 +10809,7 @@ -- ============================================================================= -- Let's ensure to close all the existing cached connections. SELECT 1 FROM postgres_fdw_disconnect_all(); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ?column? ---------- 1 @@ -10351,6 +10817,7 @@ -- No cached connections, so no records should be output. SELECT server_name FROM postgres_fdw_get_connections() ORDER BY 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree server_name ------------- (0 rows) @@ -10359,12 +10826,14 @@ BEGIN; -- Connection xact depth becomes 1 i.e. the connection is in midst of the xact. SELECT 1 FROM ft1 LIMIT 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ?column? ---------- 1 (1 row) SELECT 1 FROM ft7 LIMIT 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ?column? ---------- 1 @@ -10373,6 +10842,7 @@ -- List all the existing cached connections. loopback and loopback3 should be -- output. SELECT server_name FROM postgres_fdw_get_connections() ORDER BY 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree server_name ------------- loopback @@ -10391,6 +10861,7 @@ -- should be output as invalid connections. Also the server name for -- loopback3 should be NULL because the server was dropped. SELECT * FROM postgres_fdw_get_connections() ORDER BY 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree server_name | valid -------------+------- loopback | f @@ -10402,6 +10873,7 @@ -- All cached connections were closed while committing above xact, so no -- records should be output. SELECT server_name FROM postgres_fdw_get_connections() ORDER BY 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree server_name ------------- (0 rows) @@ -10412,6 +10884,7 @@ BEGIN; -- Ensure to cache loopback connection. SELECT 1 FROM ft1 LIMIT 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ?column? ---------- 1 @@ -10419,6 +10892,7 @@ -- Ensure to cache loopback2 connection. SELECT 1 FROM ft6 LIMIT 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ?column? ---------- 1 @@ -10427,6 +10901,7 @@ -- List all the existing cached connections. loopback and loopback2 should be -- output. SELECT server_name FROM postgres_fdw_get_connections() ORDER BY 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree server_name ------------- loopback @@ -10445,6 +10920,7 @@ -- List all the existing cached connections. loopback and loopback2 should be -- output. SELECT server_name FROM postgres_fdw_get_connections() ORDER BY 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree server_name ------------- loopback @@ -10464,12 +10940,14 @@ COMMIT; -- Ensure that loopback2 connection is closed. SELECT 1 FROM postgres_fdw_disconnect('loopback2'); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ?column? ---------- 1 (1 row) SELECT server_name FROM postgres_fdw_get_connections() WHERE server_name = 'loopback2'; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree server_name ------------- (0 rows) @@ -10486,6 +10964,7 @@ ERROR: server "unknownserver" does not exist -- Let's ensure to close all the existing cached connections. SELECT 1 FROM postgres_fdw_disconnect_all(); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ?column? ---------- 1 @@ -10493,6 +10972,7 @@ -- No cached connections, so no records should be output. SELECT server_name FROM postgres_fdw_get_connections() ORDER BY 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree server_name ------------- (0 rows) @@ -10508,6 +10988,7 @@ -- Will cache loopback connection with user mapping for regress_multi_conn_user1 SET ROLE regress_multi_conn_user1; SELECT 1 FROM ft1 LIMIT 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ?column? ---------- 1 @@ -10517,6 +10998,7 @@ -- Will cache loopback connection with user mapping for regress_multi_conn_user2 SET ROLE regress_multi_conn_user2; SELECT 1 FROM ft1 LIMIT 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ?column? ---------- 1 @@ -10525,6 +11007,7 @@ RESET ROLE; -- Should output two connections for loopback server SELECT server_name FROM postgres_fdw_get_connections() ORDER BY 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree server_name ------------- loopback @@ -10534,6 +11017,7 @@ COMMIT; -- Let's ensure to close all the existing cached connections. SELECT 1 FROM postgres_fdw_disconnect_all(); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ?column? ---------- 1 @@ -10541,6 +11025,7 @@ -- No cached connections, so no records should be output. SELECT server_name FROM postgres_fdw_get_connections() ORDER BY 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree server_name ------------- (0 rows) @@ -10559,6 +11044,7 @@ -- connection to loopback server is closed at the end of xact -- as keep_connections was set to off. SELECT 1 FROM ft1 LIMIT 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ?column? ---------- 1 @@ -10566,6 +11052,7 @@ -- No cached connections, so no records should be output. SELECT server_name FROM postgres_fdw_get_connections() ORDER BY 1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree server_name ------------- (0 rows) @@ -10637,6 +11124,7 @@ CREATE TABLE batch_table ( x int ); CREATE FOREIGN TABLE ftable ( x int ) SERVER loopback OPTIONS ( table_name 'batch_table', batch_size '10' ); EXPLAIN (VERBOSE, COSTS OFF) INSERT INTO ftable SELECT * FROM generate_series(1, 10) i; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------- Insert on public.ftable @@ -10648,10 +11136,15 @@ (6 rows) INSERT INTO ftable SELECT * FROM generate_series(1, 10) i; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree INSERT INTO ftable SELECT * FROM generate_series(11, 31) i; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree INSERT INTO ftable VALUES (32); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree INSERT INTO ftable VALUES (33), (34); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree SELECT COUNT(*) FROM ftable; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree count ------- 34 @@ -10662,6 +11155,7 @@ -- Disable batch insert CREATE FOREIGN TABLE ftable ( x int ) SERVER loopback OPTIONS ( table_name 'batch_table', batch_size '1' ); EXPLAIN (VERBOSE, COSTS OFF) INSERT INTO ftable VALUES (1), (2); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------- Insert on public.ftable @@ -10672,7 +11166,9 @@ (5 rows) INSERT INTO ftable VALUES (1), (2); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree SELECT COUNT(*) FROM ftable; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree count ------- 2 @@ -10684,6 +11180,7 @@ CREATE TRIGGER trig_row_before BEFORE INSERT ON ftable FOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo'); EXPLAIN (VERBOSE, COSTS OFF) INSERT INTO ftable VALUES (3), (4); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------- Insert on public.ftable @@ -10694,11 +11191,13 @@ (5 rows) INSERT INTO ftable VALUES (3), (4); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree NOTICE: trig_row_before(23, skidoo) BEFORE ROW INSERT ON ftable NOTICE: NEW: (3) NOTICE: trig_row_before(23, skidoo) BEFORE ROW INSERT ON ftable NOTICE: NEW: (4) SELECT COUNT(*) FROM ftable; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree count ------- 4 @@ -10726,6 +11225,7 @@ PARTITION OF batch_table FOR VALUES WITH (MODULUS 3, REMAINDER 2); INSERT INTO batch_table SELECT * FROM generate_series(1, 66) i; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree SELECT COUNT(*) FROM batch_table; count ------- @@ -10767,30 +11267,33 @@ -- foreign partition 'batch_cp_upd_test1', one that has insert batching -- enabled, so a single INSERT for both rows. INSERT INTO batch_cp_upd_test VALUES (2), (2); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree UPDATE batch_cp_upd_test t SET a = 1 FROM (VALUES (1), (2)) s(a) WHERE t.a = s.a AND s.a = 2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +ERROR: could not find junk ctid1 column -- This one moves rows from the local partition 'batch_cp_upd_test2' to the -- foreign partition 'batch_cp_upd_test2', one that has insert batching -- disabled, so separate INSERTs for the two rows. INSERT INTO batch_cp_upd_test VALUES (2), (2); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree UPDATE batch_cp_upd_test t SET a = 3 FROM (VALUES (1), (2)) s(a) WHERE t.a = s.a AND s.a = 2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +ERROR: could not find junk ctid1 column SELECT tableoid::regclass, * FROM batch_cp_upd_test ORDER BY 1; - tableoid | a -----------------------+--- - batch_cp_upd_test1_f | 1 - batch_cp_upd_test1_f | 1 - batch_cp_upd_test3_f | 3 - batch_cp_upd_test3_f | 3 + tableoid | a +--------------------+--- + batch_cp_upd_test2 | 2 + batch_cp_upd_test2 | 2 + batch_cp_upd_test2 | 2 + batch_cp_upd_test2 | 2 (4 rows) -- Should see 1 INSERT on batch_cp_upd_test1 and 2 on batch_cp_upd_test3 as -- described above. SELECT * FROM cmdlog ORDER BY 1; - cmd ------------------------------- - INSERT on batch_cp_upd_test1 - INSERT on batch_cp_upd_test3 - INSERT on batch_cp_upd_test3 -(3 rows) + cmd +----- +(0 rows) -- Clean up DROP TABLE batch_cp_upd_test; @@ -10816,6 +11319,7 @@ SERVER loopback OPTIONS (table_name 'batch_table_p1'); INSERT INTO batch_table SELECT i, 'test'||i, 'test'|| i FROM generate_series(1, 50) i; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree SELECT COUNT(*) FROM batch_table; count ------- @@ -10907,6 +11411,8 @@ INSERT INTO ltable VALUES ('AAA', 42), ('BBB', 42) RETURNING * ) INSERT INTO ftable SELECT * FROM t; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree NOTICE: ftable_rowcount_trigger: there are 0 rows in ftable NOTICE: ftable_rowcount_trigger: there are 1 rows in ftable SELECT * FROM ltable; @@ -10917,6 +11423,7 @@ (2 rows) SELECT * FROM ftable; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree a | b -----+---- AAA | 42 @@ -10924,10 +11431,12 @@ (2 rows) DELETE FROM ftable; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree WITH t AS ( UPDATE ltable SET b = b + 100 RETURNING * ) INSERT INTO ftable SELECT * FROM t; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree NOTICE: ftable_rowcount_trigger: there are 0 rows in ftable NOTICE: ftable_rowcount_trigger: there are 1 rows in ftable SELECT * FROM ltable; @@ -10938,6 +11447,7 @@ (2 rows) SELECT * FROM ftable; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree a | b -----+----- AAA | 142 @@ -10945,10 +11455,12 @@ (2 rows) DELETE FROM ftable; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree WITH t AS ( DELETE FROM ltable RETURNING * ) INSERT INTO ftable SELECT * FROM t; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree NOTICE: ftable_rowcount_trigger: there are 0 rows in ftable NOTICE: ftable_rowcount_trigger: there are 1 rows in ftable SELECT * FROM ltable; @@ -10957,6 +11469,7 @@ (0 rows) SELECT * FROM ftable; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree a | b -----+----- AAA | 142 @@ -10964,6 +11477,7 @@ (2 rows) DELETE FROM ftable; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree -- Clean up DROP FOREIGN TABLE ftable; DROP TABLE batch_table; @@ -10983,6 +11497,8 @@ BEFORE INSERT ON ltable FOR EACH ROW EXECUTE PROCEDURE ftable_rowcount_trigf(); INSERT INTO parent VALUES ('AAA', 42), ('BBB', 42), ('AAA', 42), ('BBB', 42); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree NOTICE: ftable_rowcount_trigger: there are 1 rows in ftable NOTICE: ftable_rowcount_trigger: there are 2 rows in ftable SELECT tableoid::regclass, * FROM parent; @@ -11015,12 +11531,15 @@ CREATE FOREIGN TABLE async_p2 PARTITION OF async_pt FOR VALUES FROM (2000) TO (3000) SERVER loopback2 OPTIONS (table_name 'base_tbl2'); INSERT INTO async_p1 SELECT 1000 + i, i, to_char(i, 'FM0000') FROM generate_series(0, 999, 5) i; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree INSERT INTO async_p2 SELECT 2000 + i, i, to_char(i, 'FM0000') FROM generate_series(0, 999, 5) i; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ANALYZE async_pt; -- simple queries CREATE TABLE result_tbl (a int, b int, c text); EXPLAIN (VERBOSE, COSTS OFF) INSERT INTO result_tbl SELECT * FROM async_pt WHERE b % 100 = 0; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ---------------------------------------------------------------------------------------- Insert on public.result_tbl @@ -11034,6 +11553,7 @@ (8 rows) INSERT INTO result_tbl SELECT * FROM async_pt WHERE b % 100 = 0; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree SELECT * FROM result_tbl ORDER BY a; a | b | c ------+-----+------ @@ -11062,6 +11582,7 @@ DELETE FROM result_tbl; EXPLAIN (VERBOSE, COSTS OFF) INSERT INTO result_tbl SELECT * FROM async_pt WHERE b === 505; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ---------------------------------------------------------------- Insert on public.result_tbl @@ -11077,6 +11598,7 @@ (10 rows) INSERT INTO result_tbl SELECT * FROM async_pt WHERE b === 505; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree SELECT * FROM result_tbl ORDER BY a; a | b | c ------+-----+------ @@ -11087,6 +11609,7 @@ DELETE FROM result_tbl; EXPLAIN (VERBOSE, COSTS OFF) INSERT INTO result_tbl SELECT a, b, 'AAA' || c FROM async_pt WHERE b === 505; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN --------------------------------------------------------------------------------- Insert on public.result_tbl @@ -11102,6 +11625,7 @@ (10 rows) INSERT INTO result_tbl SELECT a, b, 'AAA' || c FROM async_pt WHERE b === 505; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree SELECT * FROM result_tbl ORDER BY a; a | b | c ------+-----+--------- @@ -11122,9 +11646,11 @@ CREATE FOREIGN TABLE async_p3 PARTITION OF async_pt FOR VALUES FROM (3000) TO (4000) SERVER loopback2 OPTIONS (table_name 'base_tbl3'); INSERT INTO async_p3 SELECT 3000 + i, i, to_char(i, 'FM0000') FROM generate_series(0, 999, 5) i; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ANALYZE async_pt; EXPLAIN (VERBOSE, COSTS OFF) INSERT INTO result_tbl SELECT * FROM async_pt WHERE b === 505; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ---------------------------------------------------------------- Insert on public.result_tbl @@ -11144,6 +11670,7 @@ (14 rows) INSERT INTO result_tbl SELECT * FROM async_pt WHERE b === 505; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree SELECT * FROM result_tbl ORDER BY a; a | b | c ------+-----+------ @@ -11158,9 +11685,11 @@ -- Check case where the partitioned table has local/remote partitions CREATE TABLE async_p3 PARTITION OF async_pt FOR VALUES FROM (3000) TO (4000); INSERT INTO async_p3 SELECT 3000 + i, i, to_char(i, 'FM0000') FROM generate_series(0, 999, 5) i; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ANALYZE async_pt; EXPLAIN (VERBOSE, COSTS OFF) INSERT INTO result_tbl SELECT * FROM async_pt WHERE b === 505; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ---------------------------------------------------------------- Insert on public.result_tbl @@ -11179,6 +11708,7 @@ (13 rows) INSERT INTO result_tbl SELECT * FROM async_pt WHERE b === 505; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree SELECT * FROM result_tbl ORDER BY a; a | b | c ------+-----+------ @@ -11193,6 +11723,7 @@ CREATE TABLE join_tbl (a1 int, b1 int, c1 text, a2 int, b2 int, c2 text); EXPLAIN (VERBOSE, COSTS OFF) INSERT INTO join_tbl SELECT * FROM async_pt t1, async_pt t2 WHERE t1.a = t2.a AND t1.b = t2.b AND t1.b % 100 = 0; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Insert on public.join_tbl @@ -11218,6 +11749,7 @@ (20 rows) INSERT INTO join_tbl SELECT * FROM async_pt t1, async_pt t2 WHERE t1.a = t2.a AND t1.b = t2.b AND t1.b % 100 = 0; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree SELECT * FROM join_tbl ORDER BY a1; a1 | b1 | c1 | a2 | b2 | c2 ------+-----+------+------+-----+------ @@ -11256,6 +11788,7 @@ DELETE FROM join_tbl; EXPLAIN (VERBOSE, COSTS OFF) INSERT INTO join_tbl SELECT t1.a, t1.b, 'AAA' || t1.c, t2.a, t2.b, 'AAA' || t2.c FROM async_pt t1, async_pt t2 WHERE t1.a = t2.a AND t1.b = t2.b AND t1.b % 100 = 0; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Insert on public.join_tbl @@ -11281,6 +11814,7 @@ (20 rows) INSERT INTO join_tbl SELECT t1.a, t1.b, 'AAA' || t1.c, t2.a, t2.b, 'AAA' || t2.c FROM async_pt t1, async_pt t2 WHERE t1.a = t2.a AND t1.b = t2.b AND t1.b % 100 = 0; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree SELECT * FROM join_tbl ORDER BY a1; a1 | b1 | c1 | a2 | b2 | c2 ------+-----+---------+------+-----+--------- @@ -11322,6 +11856,7 @@ SET enable_hashjoin TO false; EXPLAIN (VERBOSE, COSTS OFF) INSERT INTO join_tbl SELECT * FROM async_p1 t1, async_pt t2 WHERE t1.a = t2.a AND t1.b = t2.b AND t1.b % 100 = 0; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ---------------------------------------------------------------------------------------- Insert on public.join_tbl @@ -11343,6 +11878,7 @@ (16 rows) INSERT INTO join_tbl SELECT * FROM async_p1 t1, async_pt t2 WHERE t1.a = t2.a AND t1.b = t2.b AND t1.b % 100 = 0; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree SELECT * FROM join_tbl ORDER BY a1; a1 | b1 | c1 | a2 | b2 | c2 ------+-----+------+------+-----+------ @@ -11387,6 +11923,7 @@ SET plan_cache_mode TO force_generic_plan; PREPARE async_pt_query (int, int) AS INSERT INTO result_tbl SELECT * FROM async_pt WHERE a < $1 AND b === $2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree EXPLAIN (VERBOSE, COSTS OFF) EXECUTE async_pt_query (3000, 505); QUERY PLAN @@ -11437,6 +11974,7 @@ RESET plan_cache_mode; CREATE TABLE local_tbl(a int, b int, c text); INSERT INTO local_tbl VALUES (1505, 505, 'foo'), (2505, 505, 'bar'); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ANALYZE local_tbl; CREATE INDEX base_tbl1_idx ON base_tbl1 (a); CREATE INDEX base_tbl2_idx ON base_tbl2 (a); @@ -11504,6 +12042,7 @@ (SELECT a, b, 'AAA' || c FROM async_p1 ORDER BY a LIMIT 10) UNION (SELECT a, b, 'AAA' || c FROM async_p2 WHERE b < 10); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ----------------------------------------------------------------------------------------------------------------- Insert on public.result_tbl @@ -11523,6 +12062,7 @@ (SELECT a, b, 'AAA' || c FROM async_p1 ORDER BY a LIMIT 10) UNION (SELECT a, b, 'AAA' || c FROM async_p2 WHERE b < 10); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree SELECT * FROM result_tbl ORDER BY a; a | b | c ------+----+--------- @@ -11546,6 +12086,7 @@ (SELECT a, b, 'AAA' || c FROM async_p1 ORDER BY a LIMIT 10) UNION ALL (SELECT a, b, 'AAA' || c FROM async_p2 WHERE b < 10); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ----------------------------------------------------------------------------------------------------------- Insert on public.result_tbl @@ -11562,6 +12103,7 @@ (SELECT a, b, 'AAA' || c FROM async_p1 ORDER BY a LIMIT 10) UNION ALL (SELECT a, b, 'AAA' || c FROM async_p2 WHERE b < 10); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree SELECT * FROM result_tbl ORDER BY a; a | b | c ------+----+--------- @@ -11613,6 +12155,7 @@ (SELECT * FROM async_p1 WHERE CURRENT_USER = SESSION_USER) UNION ALL (SELECT * FROM async_p2 WHERE CURRENT_USER = SESSION_USER); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ---------------------------------------------------------------- Append @@ -11632,6 +12175,7 @@ EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ((SELECT * FROM async_p1 WHERE b < 10) UNION ALL (SELECT * FROM async_p2 WHERE b < 10)) s WHERE CURRENT_USER = SESSION_USER; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN --------------------------------------------------------------------------------- Append @@ -11654,6 +12198,7 @@ SET enable_hashjoin TO false; EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM async_pt t1, async_p2 t2 WHERE t1.a = t2.a AND t1.b === 505; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ---------------------------------------------------------------- Nested Loop @@ -11679,6 +12224,7 @@ (20 rows) SELECT * FROM async_pt t1, async_p2 t2 WHERE t1.a = t2.a AND t1.b === 505; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree a | b | c | a | b | c ------+-----+------+------+-----+------ 2505 | 505 | 0505 | 2505 | 505 | 0505 @@ -11689,6 +12235,7 @@ ANALYZE local_tbl; EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM local_tbl t1 LEFT JOIN (SELECT *, (SELECT count(*) FROM async_pt WHERE a < 3000) FROM async_pt WHERE a < 3000) t2 ON t1.a = t2.a; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ---------------------------------------------------------------------------------------- Nested Loop Left Join @@ -11715,6 +12262,7 @@ EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF) SELECT * FROM local_tbl t1 LEFT JOIN (SELECT *, (SELECT count(*) FROM async_pt WHERE a < 3000) FROM async_pt WHERE a < 3000) t2 ON t1.a = t2.a; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ----------------------------------------------------------------------------------------- Nested Loop Left Join (actual rows=1 loops=1) @@ -11732,6 +12280,7 @@ (12 rows) SELECT * FROM local_tbl t1 LEFT JOIN (SELECT *, (SELECT count(*) FROM async_pt WHERE a < 3000) FROM async_pt WHERE a < 3000) t2 ON t1.a = t2.a; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree a | b | c | a | b | c | count ------+-----+-----+------+-----+------+------- 1505 | 505 | foo | 1505 | 505 | 0505 | 400 @@ -11783,11 +12332,13 @@ CREATE FOREIGN TABLE remote_tbl (a int, b int, c text) SERVER loopback OPTIONS (table_name 'base_tbl3'); INSERT INTO remote_tbl VALUES (2505, 505, 'bar'); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree CREATE TABLE base_tbl4 (a int, b int, c text); CREATE FOREIGN TABLE insert_tbl (a int, b int, c text) SERVER loopback OPTIONS (table_name 'base_tbl4'); EXPLAIN (VERBOSE, COSTS OFF) INSERT INTO insert_tbl (SELECT * FROM local_tbl UNION ALL SELECT * FROM remote_tbl); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ------------------------------------------------------------------------- Insert on public.insert_tbl @@ -11802,7 +12353,9 @@ (9 rows) INSERT INTO insert_tbl (SELECT * FROM local_tbl UNION ALL SELECT * FROM remote_tbl); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree SELECT * FROM insert_tbl ORDER BY a; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree a | b | c ------+-----+----- 1505 | 505 | foo @@ -11813,6 +12366,7 @@ EXPLAIN (VERBOSE, COSTS OFF) WITH t AS (UPDATE remote_tbl SET c = c || c RETURNING *) INSERT INTO join_tbl SELECT * FROM async_pt LEFT JOIN t ON (async_pt.a = t.a AND async_pt.b = t.b) WHERE async_pt.b === 505; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN ---------------------------------------------------------------------------------------- Insert on public.join_tbl @@ -11842,6 +12396,7 @@ WITH t AS (UPDATE remote_tbl SET c = c || c RETURNING *) INSERT INTO join_tbl SELECT * FROM async_pt LEFT JOIN t ON (async_pt.a = t.a AND async_pt.b = t.b) WHERE async_pt.b === 505; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree SELECT * FROM join_tbl ORDER BY a1; a1 | b1 | c1 | a2 | b2 | c2 ------+-----+------+------+-----+-------- @@ -11915,7 +12470,9 @@ -- Check EXPLAIN ANALYZE for a query that scans empty partitions asynchronously DELETE FROM async_p1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree DELETE FROM async_p2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree DELETE FROM async_p3; EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF) SELECT * FROM async_pt; @@ -11937,12 +12494,14 @@ -- ReScanForeignScan CREATE TABLE base_tbl (a int, b int); INSERT INTO base_tbl VALUES (1, 11), (2, 22), (3, 33); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree CREATE FOREIGN TABLE foreign_tbl (b int) SERVER loopback OPTIONS (table_name 'base_tbl'); CREATE FOREIGN TABLE foreign_tbl2 () INHERITS (foreign_tbl) SERVER loopback OPTIONS (table_name 'base_tbl'); EXPLAIN (VERBOSE, COSTS OFF) SELECT a FROM base_tbl WHERE (a, random() > 0) IN (SELECT a, random() > 0 FROM foreign_tbl); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree QUERY PLAN --------------------------------------------------------------------------------------------------------------- Seq Scan on public.base_tbl @@ -11959,6 +12518,7 @@ (11 rows) SELECT a FROM base_tbl WHERE (a, random() > 0) IN (SELECT a, random() > 0 FROM foreign_tbl); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree a --- 1 @@ -12006,6 +12566,7 @@ SERVER loopback2 OPTIONS (schema_name 'public', table_name 'my_application_name'); SELECT count(*) FROM remote_application_name; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree count ------- 1 @@ -12025,6 +12586,7 @@ WHERE application_name = substring('fdw_' || current_database() || pg_backend_pid() for current_setting('max_identifier_length')::int); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree count ------- 1 @@ -12038,6 +12600,7 @@ WHERE application_name = substring('fdw_' || current_setting('application_name') || CURRENT_USER || '%' for current_setting('max_identifier_length')::int); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree count ------- 1 @@ -12053,6 +12616,7 @@ pg_stat_get_activity(pg_backend_pid()))))::integer) || '.' || to_hex(pg_backend_pid()) for current_setting('max_identifier_length')::int); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree count ------- 1 @@ -12076,15 +12640,19 @@ SERVER loopback2 OPTIONS (table_name 'ploc2'); BEGIN; INSERT INTO prem1 VALUES (101, 'foo'); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree INSERT INTO prem2 VALUES (201, 'bar'); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree COMMIT; SELECT * FROM prem1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree f1 | f2 -----+----- 101 | foo (1 row) SELECT * FROM prem2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree f1 | f2 -----+----- 201 | bar @@ -12093,10 +12661,13 @@ BEGIN; SAVEPOINT s; INSERT INTO prem1 VALUES (102, 'foofoo'); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree INSERT INTO prem2 VALUES (202, 'barbar'); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree RELEASE SAVEPOINT s; COMMIT; SELECT * FROM prem1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree f1 | f2 -----+-------- 101 | foo @@ -12104,6 +12675,7 @@ (2 rows) SELECT * FROM prem2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree f1 | f2 -----+-------- 201 | bar @@ -12115,13 +12687,18 @@ BEGIN; SAVEPOINT s; INSERT INTO prem1 VALUES (103, 'baz'); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree INSERT INTO prem2 VALUES (203, 'qux'); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ROLLBACK TO SAVEPOINT s; RELEASE SAVEPOINT s; INSERT INTO prem1 VALUES (104, 'bazbaz'); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree INSERT INTO prem2 VALUES (204, 'quxqux'); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree COMMIT; SELECT * FROM prem1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree f1 | f2 -----+-------- 101 | foo @@ -12130,6 +12707,7 @@ (3 rows) SELECT * FROM prem2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree f1 | f2 -----+-------- 201 | bar @@ -12139,9 +12717,12 @@ BEGIN; INSERT INTO prem1 VALUES (105, 'test1'); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree INSERT INTO prem2 VALUES (205, 'test2'); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ABORT; SELECT * FROM prem1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree f1 | f2 -----+-------- 101 | foo @@ -12150,6 +12731,7 @@ (3 rows) SELECT * FROM prem2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree f1 | f2 -----+-------- 201 | bar @@ -12162,13 +12744,18 @@ BEGIN; SAVEPOINT s; INSERT INTO prem1 VALUES (105, 'test1'); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree INSERT INTO prem2 VALUES (205, 'test2'); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ROLLBACK TO SAVEPOINT s; RELEASE SAVEPOINT s; INSERT INTO prem1 VALUES (105, 'test1'); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree INSERT INTO prem2 VALUES (205, 'test2'); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ABORT; SELECT * FROM prem1; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree f1 | f2 -----+-------- 101 | foo @@ -12177,6 +12764,7 @@ (3 rows) SELECT * FROM prem2; +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree f1 | f2 -----+-------- 201 | bar @@ -12195,6 +12783,7 @@ CREATE FOREIGN TABLE analyze_ftable (id int, a text, b bigint) SERVER loopback OPTIONS (table_name 'analyze_rtable1'); INSERT INTO analyze_table (SELECT x FROM generate_series(1,1000) x); +WARNING: outfuncs/readfuncs failed to produce an equal rewritten parse tree ANALYZE analyze_table; SET default_statistics_target = 10; ANALYZE analyze_table;