From: | PG Bug reporting form <noreply(at)postgresql(dot)org> |
---|---|
To: | pgsql-bugs(at)lists(dot)postgresql(dot)org |
Cc: | a(dot)ratundalov(at)postgrespro(dot)ru |
Subject: | BUG #19071: commit b448f1c8d broke LEFT JOIN pushdown |
Date: | 2025-10-03 10:11:17 |
Message-ID: | 19071-91078e3db3a9d7bc@postgresql.org |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs |
The following bug has been logged on the website:
Bug reference: 19071
Logged by: Anton Ratundalov
Email address: a(dot)ratundalov(at)postgrespro(dot)ru
PostgreSQL version: 18.0
Operating system: Debian 6.1.148-1 (2025-08-26) x86_64 GNU/Linux
Description:
DDL :
\c postgres anton 127.0.0.2 65432
DROP TABLE IF exists a;
DROP TABLE IF exists b;
CREATE TABLE IF NOT exists a (c1 integer NOT NULL, c2 text);
CREATE TABLE IF NOT exists b (c1 integer NOT NULL, c2 text);
\c postgres anton 127.0.0.1 65432
CREATE extension IF NOT exists postgres_fdw;
CREATE server IF NOT exists s2 FOREIGN data wrapper postgres_fdw
options (host '127.0.0.2', port '65432', dbname 'postgres');
CREATE USER mapping IF NOT exists FOR anton server s2 options (USER
'anton');
DROP TABLE IF exists a cascade;
DROP TABLE IF exists b cascade;
CREATE TABLE IF NOT exists a (c1 integer NOT NULL, c2 text)
partition by hash(c1);
CREATE TABLE IF NOT exists a_p1 partition of a FOR values WITH
(modulus 2, remainder 0);
CREATE FOREIGN TABLE IF NOT exists a_p2 partition of a FOR values
WITH (modulus 2, remainder 1) server s2 options (table_name 'a');
CREATE TABLE IF NOT exists b (c1 integer NOT NULL, c2 text)
partition by hash(c1);
CREATE TABLE IF NOT exists b_p1 partition of b FOR values WITH
(modulus 2, remainder 0);
CREATE FOREIGN TABLE IF NOT exists b_p2 partition of b FOR values
WITH (modulus 2, remainder 1) server s2 options (table_name 'b');
INSERT INTO a ( c1, c2 ) SELECT i, 'text_'||(i)::text FROM
generate_series(1,6) i;
INSERT INTO b ( c1, c2 ) SELECT i, 'text_'||(i)::text FROM
generate_series(1,4) i;
set enable_partitionwise_join TO ON;
QUERY :
EXPLAIN( verbose, costs off )
SELECT * FROM a LEFT JOIN b ON a.c1=b.c1 WHERE a.c1=6;
PLAN :
QUERY PLAN
------------------------------------------------------------------------
Nested Loop Left Join
Output: a.c1, a.c2, b.c1, b.c2
-> Foreign Scan on public.a_p2 a
Output: a.c1, a.c2
Remote SQL: SELECT c1, c2 FROM public.a WHERE ((c1 = 6))
-> Materialize
Output: b.c1, b.c2
-> Foreign Scan on public.b_p2 b
Output: b.c1, b.c2
Remote SQL: SELECT c1, c2 FROM public.b WHERE ((c1 = 6))
(10 rows)
PLAN BEFORE THE CHANGES :
QUERY
PLAN
-------------------------------------------------------------------------------------------------------------------------------------------------------
Foreign Scan
Output: a.c1, a.c2, b.c1, b.c2
Relations: (public.a_p2 a) LEFT JOIN (public.b_p2 b)
Remote SQL: SELECT r4.c1, r4.c2, r5.c1, r5.c2 FROM (public.a r4 LEFT JOIN
public.b r5 ON (((r4.c1 = r5.c1)) AND ((r5.c1 = 6)))) WHERE ((r4.c1 = 6))
(4 rows)
From | Date | Subject | |
---|---|---|---|
Next Message | Etsuro Fujita | 2025-10-03 11:00:16 | Re: TRAP: failed Assert("outerPlan != NULL") in postgres_fdw.c |
Previous Message | Maciej Walczak | 2025-10-03 09:34:39 | RE: BUG #19069: pg_advisory_xact_lock() in a WITH query doesn't work |