WITH all_objects AS ( SELECT c.oid, n.nspname AS schema, c.relname AS name, CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'm' THEN 'materialized_view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' WHEN 'f' THEN 'foreign_table' END AS type, pg_catalog.pg_get_userbyid(c.relowner) AS owner, pg_catalog.obj_description(c.oid) AS comment FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE c.relkind IN ('r','v','m','S','s','') AND n.nspname !~ '^pg_(toast|temp)' AND n.nspname NOT IN ('information_schema', 'pg_catalog') AND has_schema_privilege(n.nspname, 'USAGE') UNION SELECT p.oid, n.nspname AS schema, p.proname AS name, 'function' AS function, pg_catalog.pg_get_userbyid(p.proowner) AS owner, NULL AS comment FROM pg_catalog.pg_namespace n JOIN pg_catalog.pg_proc p ON p.pronamespace = n.oid WHERE n.nspname !~ '^pg_(toast|temp)' AND n.nspname NOT IN ('information_schema', 'pg_catalog') ) SELECT * FROM all_objects ORDER BY 1, 2