Properly mark pg_stat_get_subscription() as returning a set.
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 8 Mar 2021 23:47:23 +0000 (18:47 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 8 Mar 2021 23:47:23 +0000 (18:47 -0500)
The initial catalog data for this function failed to set proretset
or provide a prorows estimate.  It accidentally worked anyway when
invoked in the FROM clause, because the executor isn't too picky
about this; but the planner didn't expect the function to return
multiple rows, which could lead to bad plans.  Also the function
would fail if invoked in the SELECT list.

We can't easily back-patch this fix, but fortunately the bug's
consequences aren't awful in most cases.  Getting this right is
mainly an exercise in future-proofing.

Discussion: https://postgr.es/m/1636062.1615141782@sss.pgh.pa.us

src/include/catalog/catversion.h
src/include/catalog/pg_proc.dat

index 8805c99d6f88b656ff4a0bb37b5b9fd838c674dc..e28bbf1317d047d1f7e4bf0070beaa42689c98d2 100644 (file)
@@ -53,6 +53,6 @@
  */
 
 /*                         yyyymmddN */
-#define CATALOG_VERSION_NO 202103061
+#define CATALOG_VERSION_NO 202103081
 
 #endif
index 506689d8acff2f213cbc62fcbf105458f8d45d6e..a0fe0851c4178bd40924b2568dbde5a8e5ac86cb 100644 (file)
   proargnames => '{slot_name,spill_txns,spill_count,spill_bytes,stream_txns,stream_count,stream_bytes,stats_reset}',
   prosrc => 'pg_stat_get_replication_slots' },
 { oid => '6118', descr => 'statistics: information about subscription',
-  proname => 'pg_stat_get_subscription', proisstrict => 'f', provolatile => 's',
-  proparallel => 'r', prorettype => 'record', proargtypes => 'oid',
+  proname => 'pg_stat_get_subscription', prorows => '10', proisstrict => 'f',
+  proretset => 't', provolatile => 's', proparallel => 'r',
+  prorettype => 'record', proargtypes => 'oid',
   proallargtypes => '{oid,oid,oid,int4,pg_lsn,timestamptz,timestamptz,pg_lsn,timestamptz}',
   proargmodes => '{i,o,o,o,o,o,o,o,o}',
   proargnames => '{subid,subid,relid,pid,received_lsn,last_msg_send_time,last_msg_receipt_time,latest_end_lsn,latest_end_time}',