On Sat, Aug  8, 2026 at 06:12:40PM -0400, Andrew Dunstan wrote:
> I also asked claude for a template. It gave me one with a worked example. It's
> attached.

I asked Claude Code to check our built-in extensions and got a useful
report.  Seems like we have some work to do.

---------------------------------------------------------------------------

● I scanned the local PostgreSQL master checkout at 
/usr/local/src/gen/pgsql/postgresql (REL_19_BETA1-587-gb5978350222, 20devel), 
checking every *.control extension's install and upgrade
  scripts for COMMENT ON.

  Answer: almost none of them. Only 13 of the 54 contrib extensions use COMMENT 
ON at all — the other 41 create their objects with no comments.

  The 41 contrib extensions with zero COMMENT ON

  amcheck, btree_gin, btree_gist, citext, dblink, earthdistance, file_fdw, 
fuzzystrmatch, hstore, hstore_plperl, hstore_plperlu, intagg, lo, ltree, 
ltree_plpython3u, pageinspect,
  pg_buffercache, pg_freespacemap, pg_logicalinspect, pg_prewarm, pgrowlocks, 
pg_stash_advice, pg_stat_statements, pgstattuple, pg_surgery, pg_trgm, 
pg_visibility, pg_walinspect, pgcrypto,
  postgres_fdw, autoinc, insert_username, moddatetime, sslinfo, tablefunc, tcn, 
tsm_system_rows, tsm_system_time, unaccent, uuid-ossp, xml2

  The 13 that do use it

  
┌─────────────────────────────────────────────────────────────────────────────────────────────┬──────────────────┬───────────────────────────────────┐
  │                                          Extension                          
                │ COMMENT ON count │         What's commented          │
  
├─────────────────────────────────────────────────────────────────────────────────────────────┼──────────────────┼───────────────────────────────────┤
  │ seg                                                                         
                │ 15               │ operators/functions               │
  
├─────────────────────────────────────────────────────────────────────────────────────────────┼──────────────────┼───────────────────────────────────┤
  │ cube                                                                        
                │ 11               │ operators/functions               │
  
├─────────────────────────────────────────────────────────────────────────────────────────────┼──────────────────┼───────────────────────────────────┤
  │ isn                                                                         
                │ 8                │ functions                         │
  
├─────────────────────────────────────────────────────────────────────────────────────────────┼──────────────────┼───────────────────────────────────┤
  │ intarray                                                                    
                │ 7                │ operators/functions               │
  
├─────────────────────────────────────────────────────────────────────────────────────────────┼──────────────────┼───────────────────────────────────┤
  │ bloom                                                                       
                │ 1                │ COMMENT ON ACCESS METHOD          │
  
├─────────────────────────────────────────────────────────────────────────────────────────────┼──────────────────┼───────────────────────────────────┤
  │ dict_int                                                                    
                │ 1                │ COMMENT ON TEXT SEARCH DICTIONARY │
  
├─────────────────────────────────────────────────────────────────────────────────────────────┼──────────────────┼───────────────────────────────────┤
  │ dict_xsyn                                                                   
                │ 1                │ COMMENT ON TEXT SEARCH DICTIONARY │
  
├─────────────────────────────────────────────────────────────────────────────────────────────┼──────────────────┼───────────────────────────────────┤
  │ bool_plperl, bool_plperlu, jsonb_plperl, jsonb_plperlu, jsonb_plpython3u, 
hstore_plpython3u │ 1 each           │ COMMENT ON TRANSFORM              │
  
└─────────────────────────────────────────────────────────────────────────────────────────────┴──────────────────┴───────────────────────────────────┘

---------------------------------------------------------------------------

and check externally-developed extensions:

---------------------------------------------------------------------------

● I sampled 31 widely-used external extensions by downloading their current 
sources from GitHub and scanning their install/upgrade scripts (excluding test 
and regression directories).

  The distribution is more polarized than contrib: most external extensions 
also skip COMMENT ON entirely, but the ones that do use it tend to use it 
exhaustively rather than on a handful of
  objects.

  No COMMENT ON at all (19 of 31)

  hypopg, pgaudit, pg_hint_plan, pg_ivm, pgjwt, pgmq, pg_partman, pg_qualstats, 
pg_repack, pgroonga, pgsql-http, pg_stat_kcache, pg_stat_monitor, pgTAP, 
pg_tle, pguint, postgresql-hll, rum,
  zombodb

  Notably pgTAP — ~1,000 assertion functions across sql/pgtap.sql.in, not one 
of them commented.

  Systematic users (4)

  
┌───────────┬───────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
  │ Extension │                                                     Scale       
                                              │
  
├───────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
  │ Citus     │ 470 of 543 UDF definition files carry a COMMENT ON — 
essentially every function it creates                    │
  
├───────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
  │ orafce    │ 255 in the current install script alone (orafce--4.16.sql), all 
COMMENT ON FUNCTION                           │
  
├───────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
  │ pgRouting │ 332 statements across 162 function files; the comments are 
multi-line, embedding parameter lists and doc URLs │
  
├───────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
  │ pgvector  │ 149 in vector--0.8.6.sql — verified against the copy installed 
on this host                                   │
  
└───────────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

  Token users (7)

  Apache AGE (10), pgsodium (10), pg_cron (9), pg_dirtyread (5), topn (5), 
pg_graphql (4), and TimescaleDB (2) — which is the minimal case: 
sql/comment_apache.sql and sql/comment_tsl.sql each
  contain a single COMMENT ON EXTENSION timescaledb, and nothing on the objects 
themselves.

  PostGIS is the interesting case

  Its extension script contains no COMMENT ON for its own objects — the 21 hits 
I found are inside the bodies of CreateTopology() and UpgradeTopology(), 
commenting columns of user topology
  tables at runtime.

  But PostGIS does ship comments, just outside the extension mechanism. 
doc/Makefile.in generates postgis_comments.sql, raster_comments.sql, 
topology_comments.sql, and sfcgal_comments.sql from
  the DocBook XML via XSLT (doc/xsl/*_comments.sql.xsl) — a COMMENT ON for 
every documented function, derived from the documentation itself. Those are 
installed by a separate make
  comments-install target and applied by hand; extensions/postgis/Makefile.in 
never references them, so CREATE EXTENSION postgis does not add them. It's the 
only project in the sample that
  treats comments as a build artifact of the docs rather than hand-written SQL.

  Caveats on method

  Counts span all versioned scripts in each repo, not just the current install 
script, so some reflect comments added in one upgrade path. pg_graphql builds 
its SQL through pgrx/Rust, so
  anything emitted from Rust macros rather than sql/*.sql wouldn't be caught. 
And this is a 31-extension sample of a much longer tail — it establishes the 
pattern, not a census.

-- 
  Bruce Momjian  <[email protected]>        https://momjian.us
  EDB                                      https://enterprisedb.com

  Do not let urgent matters crowd out time for investment in the future.


Reply via email to