Hello PostgreSQL Hackers,
I propose an enhancement to psql \dn+ to display default schema privileges when 
nspacl is NULL, by using COALESCE with pg_catalog.acldefault('n', n.nspowner).
Currently, \dn+ shows NULL for "Access privileges" if a schema's ACLs haven't 
been explicitly altered. This can be misleading after a pg_dump/pg_restore 
operation, as pg_dump correctly omits GRANT statements for inherent owner 
privileges. On the new cluster, \dn+ then displays NULL, suggesting to 
operators that owner privileges might have been lost.
 
SELECT
    n.nspname AS "Name",
    pg_catalog.pg_get_userbyid(n.nspowner) AS "Owner",
    COALESCE(
        pg_catalog.array_to_string(n.nspacl, E'\n'),
        pg_catalog.array_to_string(pg_catalog.acldefault('n', n.nspowner), 
E'\n')
    ) AS "Access privileges",
    pg_catalog.obj_description(n.oid, 'pg_namespace') AS "Description"
FROM
    pg_catalog.pg_namespace n
WHERE
    n.nspname !~ '^pg_' AND n.nspname <> 'information_schema'
ORDER BY
    1;
 
This change would offer a more intuitive view of the owner's actual (default) 
privileges. While an ideal long-term solution might involve CREATE SCHEMA 
populating nspacl with default owner rights, modifying \dn+ is a simpler 
immediate improvement.
Separately, adding a note to the pg_dump documentation clarifying that owner's 
inherent privileges are not explicitly dumped could also be beneficial for 
users.
If there's any misunderstanding on my part about how pg_dump or the 
pg_namespace catalog works in this regard, I would welcome an explanation.
Thank you for your consideration.
Best regards,
Myoungseok Noh

Reply via email to