BUG #15781: subselect on foreign table (postgres_fdw) can crash (segfault)

The Post Office <noreply@postgresql.org>

From: PG Bug reporting form <noreply@postgresql.org>
To: pgsql-bugs@lists.postgresql.org
Cc: sean.johnston@edgeintelligence.com
Date: 2019-04-25T13:32:31Z
Lists: pgsql-bugs, pgsql-hackers
The following bug has been logged on the website:

Bug reference:      15781
Logged by:          Sean Johnston
Email address:      sean.johnston@edgeintelligence.com
PostgreSQL version: 11.2
Operating system:   docker image postgres:11.2
Description:        

Example Query:

select exists(select c1 from ft4), avg(c1) from ft4 where c1 = (select
max(c1) from ft4);

Full Steps (modified from the postgres_fdw regression tests):

CREATE EXTENSION postgres_fdw;

CREATE SERVER testserver1 FOREIGN DATA WRAPPER postgres_fdw;
 DO $d$
	BEGIN
	EXECUTE $$CREATE SERVER loopback FOREIGN DATA WRAPPER postgres_fdw
	OPTIONS (dbname '$$||current_database()||$$',
		port '$$||current_setting('port')||$$'
	)$$;
	END;
$d$;
CREATE USER MAPPING FOR CURRENT_USER SERVER loopback;

CREATE SCHEMA "S 1";

CREATE TABLE "S 1"."T 3" (
  c1 int NOT NULL,
  c2 int NOT NULL,
  c3 text,
  CONSTRAINT t3_pkey PRIMARY KEY (c1)
);

CREATE FOREIGN TABLE ft4 (
  c1 int NOT NULL,
  c2 int NOT NULL,
  c3 text
) SERVER loopback OPTIONS (schema_name 'S 1', table_name 'T 3');

select exists(select c1 from ft4), avg(c1) from ft4 where c1 = (select
max(c1) from ft4);

Commits

  1. Avoid postgres_fdw crash for a targetlist entry that's just a Param.