PUBLIC role is a predefined role that is automatically assigned to all new users. It is always enabled and cannot be dropped or revoked. Use this role to grant all database users the same minimum set of privileges.
Like any role, the
PUBLIC role can be granted privileges to individual objects and other roles. The following example grants the
PUBLIC role INSERT and SELECT privileges on table
publicdata. This enables all users to read data in that table and insert new data:
=> CREATE TABLE publicdata (a INT, b VARCHAR); CREATE TABLE => GRANT INSERT, SELECT ON publicdata TO PUBLIC; GRANT PRIVILEGE => CREATE PROJECTION publicdataproj AS (SELECT * FROM publicdata); CREATE PROJECTION => \c - bob You are now connected as user "bob". => INSERT INTO publicdata VALUES (10, 'Hello World'); OUTPUT -------- 1 (1 row)
The following example grants
employee role, so all database users have
=> GRANT employee TO public; GRANT ROLE
WITH ADMIN OPTION is invalid for any
GRANT statement that specifies
PUBLIC as grantee.