mirror of
https://github.com/postgres/postgres.git
synced 2025-11-07 19:06:32 +03:00
Improve default and empty privilege outputs in psql.
Default privileges are represented as NULL::aclitem[] in catalog ACL columns, while revoking all privileges leaves an empty aclitem[]. These two cases used to produce identical output in psql meta-commands like \dp. Using something like "\pset null '(default)'" as a workaround for spotting the difference did not work, because null values were always displayed as empty strings by describe.c's meta-commands. This patch improves that with two changes: 1. Print "(none)" for empty privileges so that the user is able to distinguish them from default privileges, even without special workarounds. 2. Remove the special handling of null values in describe.c, so that "\pset null" is honored like everywhere else. (This affects all output from these commands, not only ACLs.) The privileges shown by \dconfig+ and \ddp as well as the column privileges shown by \dp are not affected by change #1, because the respective aclitem[] is reset to NULL or deleted from the catalog instead of leaving an empty array. Erik Wienhold and Laurenz Albe Discussion: https://postgr.es/m/1966228777.127452.1694979110595@office.mailbox.org
This commit is contained in:
@@ -1578,6 +1578,7 @@ COMMIT;
|
||||
SELECT COUNT(*) AS "#mum"
|
||||
FROM bla WHERE s = 'Mum' \; -- no mum here
|
||||
SELECT * FROM bla ORDER BY 1;
|
||||
COMMIT;
|
||||
|
||||
-- reset all
|
||||
\set AUTOCOMMIT on
|
||||
@@ -1853,3 +1854,34 @@ DROP ROLE regress_du_role0;
|
||||
DROP ROLE regress_du_role1;
|
||||
DROP ROLE regress_du_role2;
|
||||
DROP ROLE regress_du_admin;
|
||||
|
||||
-- Test display of empty privileges.
|
||||
BEGIN;
|
||||
-- Create an owner for tested objects because output contains owner name.
|
||||
CREATE ROLE regress_zeropriv_owner;
|
||||
SET LOCAL ROLE regress_zeropriv_owner;
|
||||
|
||||
CREATE DOMAIN regress_zeropriv_domain AS int;
|
||||
REVOKE ALL ON DOMAIN regress_zeropriv_domain FROM CURRENT_USER, PUBLIC;
|
||||
\dD+ regress_zeropriv_domain
|
||||
|
||||
CREATE PROCEDURE regress_zeropriv_proc() LANGUAGE sql AS '';
|
||||
REVOKE ALL ON PROCEDURE regress_zeropriv_proc() FROM CURRENT_USER, PUBLIC;
|
||||
\df+ regress_zeropriv_proc
|
||||
|
||||
CREATE TABLE regress_zeropriv_tbl (a int);
|
||||
REVOKE ALL ON TABLE regress_zeropriv_tbl FROM CURRENT_USER;
|
||||
\dp regress_zeropriv_tbl
|
||||
|
||||
CREATE TYPE regress_zeropriv_type AS (a int);
|
||||
REVOKE ALL ON TYPE regress_zeropriv_type FROM CURRENT_USER, PUBLIC;
|
||||
\dT+ regress_zeropriv_type
|
||||
|
||||
ROLLBACK;
|
||||
|
||||
-- Test display of default privileges with \pset null.
|
||||
CREATE TABLE defprivs (a int);
|
||||
\pset null '(default)'
|
||||
\z defprivs
|
||||
\pset null ''
|
||||
DROP TABLE defprivs;
|
||||
|
||||
Reference in New Issue
Block a user