But if you do so manually you'll end up with something like
SELECT c.relname AS table, a.attname AS column, d.description AS comment FROM pg_catalog.pg_attribute a JOIN pg_catalog.pg_class c ON a.attrelid = c.oid LEFT JOIN pg_catalog.pg_description d ON d.classoid = c.tableoid and d.objoid = c.oid and d.objsubid = a.attnum WHERE d.description IS NOT NULL;
For me, that formulation is quite a bit faster than the original ---
A lot faster for me too (~30-40 ms). Thanks!
and then to add insult to injury, has to search pg_description a second time for each hit.
Not sure if I'm understanding this correctly, but are you saying that because col_description() is specified in two places in the query, that it actually will get called twice? I was under the impression that a function (at least a non-volatile one) specified multiple times, but with the same arguments, would only get called once. Is that just wishful thinking?