Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wAN2i-002Jh1-1G for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Apr 2026 07:09:40 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wAN2g-005ggk-2v for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Apr 2026 07:09:39 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wAN2g-005ggP-1b for pgsql-hackers@lists.postgresql.org; Wed, 08 Apr 2026 07:09:39 +0000 Received: from mail-yx1-xb135.google.com ([2607:f8b0:4864:20::b135]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wAN2d-00000001B6a-3Pr6 for pgsql-hackers@postgresql.org; Wed, 08 Apr 2026 07:09:38 +0000 Received: by mail-yx1-xb135.google.com with SMTP id 956f58d0204a3-6507a7d2eccso1764044d50.0 for ; Wed, 08 Apr 2026 00:09:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775632175; cv=none; d=google.com; s=arc-20240605; b=dHnYSPec1zHv8pPXX3259tIMu8uWY5q5F0KieVAitMtEfdIzYvw8AocAcYBKr8nt9f DW7N0ihnYel21+ysWyAevyJhVdYdbCAuVHe+F2Mrns6uaX5pRilYwiRlsKLyCA9xA+g5 +ld409lfugXpgDK3+BErk5nVXxUEXb9l2YfmAQ/QpNKxwINddQ2l5xvkWvrVCQODYlb/ tNs7NsO+RgACMjRa2w5VMpt5sohOcIPTeflwIHOoeadwKqlV5h/0fYH+p592a+Ti7vb+ lq9+xxj80gpH9EuJggjDFR/QqSE9T/80rKBSpodwadFko5y5mkamHoElLQiqzPgTOBl1 suow== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=eSCd9GLtUuAx7ej+CJNXer2FP5ebosJriASihw8DsQE=; fh=yKE1O+gZZqkttjm8T90RZj3K+FXUVjJrT9pXHlJAa8E=; b=VdlMyJmcdVJGeBrqVDoEL62Uz8i4IaWoRAgKPuYCrTFgWU4/8HFdC19KrWxWk9VuBd RLqrLPjtGhpdeMrjINGqGiuimXXs8RuiE03KIg2ZvqqubzSKYAj5oSR1+aHWS22HwB1d DnV0Z+ivn0V0Fbj3GiKOzD/UXGgv8mBZbpUM10f69auq1PWBp+ToCPOCHP5N7ppAyopJ Gp2ergju2G7aRX+0xifUrT4bEdwFfHy+Z5dHy+n11Iad+FQbjmYSgXyBO2BQVfr87GPy +TlSGHhS0EcllRi7qEDam8/n2CbmBkN8O4AtpC4+eZYDSdEep1lPyPgzhxzX6wEC9rdz 2BtQ==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775632175; x=1776236975; darn=postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=eSCd9GLtUuAx7ej+CJNXer2FP5ebosJriASihw8DsQE=; b=Zb3AD9/A7MGZQzX+onRi8g8IiStOI7EtGovfD8bF0PN5nxHxPrMk6DcUZ7G/JwC5Np RbgYkqGNZra6AdKp+V5Lu0fE+ghc8qKtGob70N1OSOx/NbRZfYCgqLG0+G8X02T1MNNR O2ivEbgXDzMXKhzRSXhmKEBcUJJZoe/y54KwI8e/xoQIwGuxG+9uTHxxQdsc0oHKa/Av MzyaOyV6sjYON4K1v2AIHtntRVJCAq6BQaE1IQkGaRv08/Ov3gMMA/MMCynVnHHxMzu3 4tVBj5mRFdg6BrY3u7X8UhF5FJCR8qx9H21mgGhvOZLxKeWomgwh3iDdkvwan6xtvMVx iuOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775632175; x=1776236975; h=to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=eSCd9GLtUuAx7ej+CJNXer2FP5ebosJriASihw8DsQE=; b=LlIuw2bxpnKLVM2WNQkB2xIrUzhMWqhc2BBeS/JhdTm6hGsApIrDFQT33abFvWlhuP kasmrZY9inQ1junwHf3TSfXsw8HuiV57QqLp7MH4t5OdiXl45JgGxVF+EXWTcn+2G+iN +zf5XZbYxaZCCZIRIae+IC9Fo2raZl52sLdyCSHIGi2bzIMlqKxRO5T1Lwo72lAX8bTX 6HpnnHAp3kEhKJ8FTKk1fThTyfd7VbYLv9bgacQUmuxRNrw0Qy3cXN3UVCdScXfRvQpC k1PrUa0Mw8anTFXPgErq1t0VL54Tuxn5cDmL0ANPAv+2DAwpcWF7YkNgordCGj7myEOM fgJg== X-Gm-Message-State: AOJu0Yzr2gGqw8Z5YGkeJNrLpsAr92B/WrY70vrd7tdPAmSrftnxyiPf RTKs73hoMby5RvZ4ynfRdNhvgjq/yC27HomeyMr5v5F8aAeUDmMPgeDJa8rQKsvLlgRHIfkFtL3 rv8oORKlBQG5yAkubK3+cR2ONLEVn1cyZkHFulAA= X-Gm-Gg: AeBDieuxFhpbEw3ZTEDEtSRTZ/NqDLjbF/lNmfav6nBTGtricuziMT4y27PmqPKMjhl ANyDrXFmyH/1ghwqBT+qUXpu1Uw02mb8Z1fkExj29DH4G2g1YhpaBaEJcpkA3OeYgpY4/BqSouR Y9v/2/cnNzjlPvtIlSgWi0Fx6XJxHTkBp2p3xvj6iPq9oD6ZOlcBXUGhAwXzeTNdusu68rJA2ho J36nCtqqw09W+yA0NugiMbgufsYipBw2vbvsyBl4S9d+oO7lyL6ZwdtY+OJrNmVg4TeB/0C0xiG QiPPINQ= X-Received: by 2002:a05:690e:440c:b0:650:dbd:6f83 with SMTP id 956f58d0204a3-650488247f5mr13816465d50.48.1775632175003; Wed, 08 Apr 2026 00:09:35 -0700 (PDT) MIME-Version: 1.0 From: Lakshmi N Date: Wed, 8 Apr 2026 00:09:23 -0700 X-Gm-Features: AQROBzBkimfMSlVfrT7d9xWZTeKjCM6Wz8TxHqzQyuaQq_bMB-fxx8F7AZCACLY Message-ID: Subject: DOCS: pg_plan_advice minor doc fixes To: pgsql-hackers@postgresql.org, pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000000b5568064eed954f" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000000b5568064eed954f Content-Type: multipart/alternative; boundary="0000000000000b5567064eed954d" --0000000000000b5567064eed954d Content-Type: text/plain; charset="UTF-8" Hi hackers, I noticed the following minor discrepancy in the pg_plan_advice docs, attached a patch to address this. (1) FOREIGN SCAN should be FOREIGN JOIN in the scan method advice tag. I tested with FOREIGN SCAN and can confirm it gives a syntax error while the other one works correctly. postgres=# SET pg_plan_advice.advice = 'FOREIGN_JOIN((t1 t2))'; EXPLAIN (COSTS OFF, PLAN_ADVICE) SELECT * FROM fdw_t1 t1 JOIN fdw_t2 t2 ON t1.id = t2.t1_id; SET QUERY PLAN ------------------------------------------------- Foreign Scan Relations: (fdw_t1 t1) INNER JOIN (fdw_t2 t2) Supplied Plan Advice: FOREIGN_JOIN((t1 t2)) /* matched */ Generated Plan Advice: FOREIGN_JOIN((t1 t2)) NO_GATHER(t1 t2) (7 rows) (2) NESTED_LOOP_MEMOIZE is missing from the join method list in the doc though it is supported. Verified this by running below: postgres=# SET pg_plan_advice.advice = 'NESTED_LOOP_MEMOIZE(d)'; SET postgres=# EXPLAIN (COSTS OFF, PLAN_ADVICE) select * from t1 f JOIN t2 ON f.id = t2.t1_id; QUERY PLAN -------------------------------------------- Hash Join Hash Cond: (t2.t1_id = f.id) -> Seq Scan on t2 -> Hash -> Seq Scan on t1 f Supplied Plan Advice: NESTED_LOOP_MEMOIZE(d) /* not matched */ Generated Plan Advice: JOIN_ORDER(t2 f) HASH_JOIN(f) SEQ_SCAN(t2 f) NO_GATHER(f t2) (12 rows) Regards, Lakshmi --0000000000000b5567064eed954d Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi hackers,

I noticed the following min= or discrepancy in the pg_plan_advice docs, attached a patch to address this= .=C2=A0

(1) FOREIGN SCAN should be FOREIGN JOIN in= the scan method advice=C2=A0tag. I tested with FOREIGN SCAN and can confir= m it gives a syntax error while the other one works correctly.
postgres=3D# SET pg_plan_advice.advice =3D 'FOREIGN_JOIN((= t1 t2))';=C2=A0
EXPLAIN (COSTS OFF, PLAN_ADVICE)
=C2=A0 =C2=A0 SE= LECT * FROM fdw_t1 t1 JOIN fdw_t2 t2 ON=C2=A0t1.id=C2=A0=3D t2.t1_id;

SET
=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0QUERY PLAN =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0
------------= -------------------------------------
=C2=A0Foreign Scan
=C2=A0 =C2= =A0Relations: (fdw_t1 t1) INNER JOIN (fdw_t2 t2)
=C2=A0Supplied Plan Adv= ice:
=C2=A0 =C2=A0FOREIGN_JOIN((t1 t2)) /* matched */
=C2=A0Generated= Plan Advice:
=C2=A0 =C2=A0FOREIGN_JOIN((t1 t2))
=C2=A0 =C2=A0NO_GATH= ER(t1 t2)
(7 rows)


(2) NESTE= D_LOOP_MEMOIZE is missing from the join method list in the doc though it is= supported.=C2=A0 Verified this by running below:

= postgres=3D# SET pg_plan_advice.advice =3D 'NESTED_LOOP_MEMOIZE(d)'= ;
SET
postgres=3D# EXPLAIN (COSTS OFF, PLAN_ADVICE) select * from t1 = f JOIN t2 ON=C2=A0f.id=C2=A0= =3D t2.t1_id;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0QUERY PLAN =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0--------------------------------------------
=C2=A0Hash Join
=C2=A0 = =C2=A0Hash Cond: (t2.t1_id =3D=C2=A0f.id)
=C2=A0 =C2=A0-> =C2=A0Seq Scan on t2
=C2=A0 =C2=A0-&= gt; =C2=A0Hash
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0-> =C2=A0Seq Scan on= t1 f
=C2=A0Supplied Plan Advice:
=C2=A0 =C2=A0NESTED_LOOP_MEMOIZE(d)= /* not matched */
=C2=A0Generated Plan Advice:
=C2=A0 =C2=A0JOIN_ORD= ER(t2 f)
=C2=A0 =C2=A0HASH_JOIN(f)
=C2=A0 =C2=A0SEQ_SCAN(t2 f)
=C2= =A0 =C2=A0NO_GATHER(f t2)
(12 rows)

Regards,
Lakshmi
--0000000000000b5567064eed954d-- --0000000000000b5568064eed954f Content-Type: application/octet-stream; name="0001-doc-Fix-pgplanadvice-tags-for-FOREIGN_JOIN-and-NESTE.patch" Content-Disposition: attachment; filename="0001-doc-Fix-pgplanadvice-tags-for-FOREIGN_JOIN-and-NESTE.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnppi92q0 RnJvbSBhNGQ2NWIxZjJlZmY1MDU1MzUwOTcwMDhmNWFlNTVkMGFlMzdkNjYxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBMYWtzaG1pIE4gPGxha3NobWluLmpoc0BnbWFpbC5jb20+CkRh dGU6IFR1ZSwgNyBBcHIgMjAyNiAyMzo1ODoxNSAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIERPQ1M6 IFVwZGF0ZSBwZ3BsYW5hZHZpY2UgdGFncyBmb3IgRk9SRUlHTl9KT0lOIGFuZAogTkVTVEVEX0xP T1BfTUVNT0laRQoKLS0tCiBkb2Mvc3JjL3NnbWwvcGdwbGFuYWR2aWNlLnNnbWwgfCA4ICsrKyst LS0tCiAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9wZ3BsYW5hZHZpY2Uuc2dtbCBiL2RvYy9zcmMvc2dtbC9w Z3BsYW5hZHZpY2Uuc2dtbAppbmRleCBjM2UxY2NiNjBhMi4uNzMxNTU0NjFjMGIgMTAwNjQ0Ci0t LSBhL2RvYy9zcmMvc2dtbC9wZ3BsYW5hZHZpY2Uuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcGdw bGFuYWR2aWNlLnNnbWwKQEAgLTI2Niw3ICsyNjYsNyBAQCBTRVFfU0NBTig8cmVwbGFjZWFibGU+ dGFyZ2V0PC9yZXBsYWNlYWJsZT4gWyAuLi4gXSkKIFRJRF9TQ0FOKDxyZXBsYWNlYWJsZT50YXJn ZXQ8L3JlcGxhY2VhYmxlPiBbIC4uLiBdKQogSU5ERVhfU0NBTig8cmVwbGFjZWFibGU+dGFyZ2V0 PC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPmluZGV4X25hbWU8L3JlcGxhY2VhYmxlPiBbIC4u LiBdKQogSU5ERVhfT05MWV9TQ0FOKDxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPiA8 cmVwbGFjZWFibGU+aW5kZXhfbmFtZTwvcmVwbGFjZWFibGU+IFsgLi4uIF0pCi1GT1JFSUdOX1ND QU4oKDxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPiBbIC4uLiBdKSBbIC4uLiBdKQor Rk9SRUlHTl9KT0lOKCg8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4gWyAuLi4gXSkg WyAuLi4gXSkKIEJJVE1BUF9IRUFQX1NDQU4oPHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFi bGU+IFsgLi4uIF0pCiBET19OT1RfU0NBTig8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJs ZT4gWyAuLi4gXSk8L3N5bm9wc2lzPgogCkBAIC0yODgsMTAgKzI4OCwxMCBAQCBET19OT1RfU0NB Tig8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4gWyAuLi4gXSk8L3N5bm9wc2lzPgog ICAgPC9wYXJhPgogCiAgICA8cGFyYT4KLSAgICA8bGl0ZXJhbD5GT1JFSUdOX1NDQU48L2xpdGVy YWw+IHNwZWNpZmllcyB0aGF0IGEgam9pbiBiZXR3ZWVuIHR3byBvcgorICAgIDxsaXRlcmFsPkZP UkVJR05fSk9JTjwvbGl0ZXJhbD4gc3BlY2lmaWVzIHRoYXQgYSBqb2luIGJldHdlZW4gdHdvIG9y CiAgICAgbW9yZSBmb3JlaWduIHRhYmxlcyBzaG91bGQgYmUgcHVzaGVkIGRvd24gdG8gYSByZW1v dGUgc2VydmVyIHNvCiAgICAgdGhhdCBpdCBjYW4gYmUgaW1wbGVtZW50ZWQgYXMgYSBzaW5nbGUg PGxpdGVyYWw+Rm9yZWlnbiBTY2FuPC9saXRlcmFsPi4KLSAgICBTcGVjaWZ5aW5nIDxsaXRlcmFs PkZPUkVJR05fU0NBTjwvbGl0ZXJhbD4gZm9yIGEgc2luZ2xlIGZvcmVpZ24gdGFibGUgaXMKKyAg ICBTcGVjaWZ5aW5nIDxsaXRlcmFsPkZPUkVJR05fSk9JTjwvbGl0ZXJhbD4gZm9yIGEgc2luZ2xl IGZvcmVpZ24gdGFibGUgaXMKICAgICBuZWl0aGVyIG5lY2Vzc2FyeSBub3IgcGVybWlzc2libGU6 IGEgPGxpdGVyYWw+Rm9yZWlnbiBTY2FuPC9saXRlcmFsPiB3aWxsCiAgICAgbmVlZCB0byBiZSB1 c2VkIHJlZ2FyZGxlc3MuIElmIHlvdSB3YW50IHRvIHByZXZlbnQgYSBqb2luIGZyb20gYmVpbmcK ICAgICBwdXNoZWQgZG93biwgY29uc2lkZXIgdXNpbmcgdGhlIDxsaXRlcmFsPkpPSU5fT1JERVI8 L2xpdGVyYWw+IHRhZyBmb3IKQEAgLTM5NSw3ICszOTUsNyBAQCBqb2luX21ldGhvZF9uYW1lKDxy ZXBsYWNlYWJsZT5qb2luX21ldGhvZF9pdGVtPC9yZXBsYWNlYWJsZT4gWyAuLi4gXSkKIAogPHBo cmFzZT53aGVyZSA8cmVwbGFjZWFibGU+am9pbl9tZXRob2RfbmFtZTwvcmVwbGFjZWFibGU+IGlz OjwvcGhyYXNlPgogCi17IE1FUkdFX0pPSU5fTUFURVJJQUxJWkUgfCBNRVJHRV9KT0lOX1BMQUlO IHwgTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUgfCBORVNURURfTE9PUF9QTEFJTiB8IEhBU0hfSk9J TiB9Cit7IE1FUkdFX0pPSU5fTUFURVJJQUxJWkUgfCBNRVJHRV9KT0lOX1BMQUlOIHwgTkVTVEVE X0xPT1BfTUFURVJJQUxJWkUgfCBORVNURURfTE9PUF9NRU1PSVpFIHwgTkVTVEVEX0xPT1BfUExB SU4gfCBIQVNIX0pPSU4gfQogCiA8cGhyYXNlPmFuZCA8cmVwbGFjZWFibGU+am9pbl9tZXRob2Rf aXRlbTwvcmVwbGFjZWFibGU+IGlzOjwvcGhyYXNlPgogCi0tIAoyLjQzLjAKCg== --0000000000000b5568064eed954f--