You are now connected as new user postgres. select has_table_privilege(NULL,'pg_shadow','select'); has_table_privilege --------------------- (1 row) select has_table_privilege('postgres','pg_shad','select'); ERROR: has_table_privilege: invalid relname pg_shad select has_table_privilege('post','pg_shadow','select'); ERROR: has_table_privilege: invalid user name post select has_table_privilege('postgres','pg_shadow','sel'); ERROR: has_table_privilege: invalid privilege type sel select has_table_privilege(-999999,'pg_shadow','update'); ERROR: pg_aclcheck: invalid user id 4293967297 select has_table_privilege('postgres',-999999,'rule'); ERROR: has_table_privilege: invalid relation oid -999999 select has_table_privilege('postgres','pg_shadow','select'); has_table_privilege --------------------- t (1 row) select has_table_privilege('postgres','pg_shadow','insert'); has_table_privilege --------------------- t (1 row) select has_table_privilege(t2.usesysid,'pg_shadow','update') from (select usesysid from pg_user where usename = 'postgres') as t2; has_table_privilege --------------------- t (1 row) select has_table_privilege(t2.usesysid,'pg_shadow','delete') from (select usesysid from pg_user where usename = 'postgres') as t2; has_table_privilege --------------------- t (1 row) select has_table_privilege('postgres',t1.oid,'rule') from (select oid from pg_class where relname = 'pg_shadow') as t1; has_table_privilege --------------------- t (1 row) select has_table_privilege('postgres',t1.oid,'references') from (select oid from pg_class where relname = 'pg_shadow') as t1; has_table_privilege --------------------- t (1 row) select has_table_privilege(t2.usesysid,t1.oid,'select') from (select oid from pg_class where relname = 'pg_shadow') as t1,(select usesysid from pg_user where usename = 'postgres') as t2; has_table_privilege --------------------- t (1 row) select has_table_privilege(t2.usesysid,t1.oid,'insert') from (select oid from pg_class where relname = 'pg_shadow') as t1,(select usesysid from pg_user where usename = 'postgres') as t2; has_table_privilege --------------------- t (1 row) select has_table_privilege('pg_shadow','update'); has_table_privilege --------------------- t (1 row) select has_table_privilege('pg_shadow','delete'); has_table_privilege --------------------- t (1 row) select has_table_privilege(t1.oid,'select') from (select oid from pg_class where relname = 'pg_shadow') as t1; has_table_privilege --------------------- t (1 row) select has_table_privilege(t1.oid,'trigger') from (select oid from pg_class where relname = 'pg_shadow') as t1; has_table_privilege --------------------- t (1 row) create table testtable(f1 int, f2 text); CREATE select has_table_privilege('postgres','testtable','select'); has_table_privilege --------------------- t (1 row) select has_table_privilege('postgres','testtable','insert'); has_table_privilege --------------------- t (1 row) select has_table_privilege(t2.usesysid,'testtable','update') from (select usesysid from pg_user where usename = 'postgres') as t2; has_table_privilege --------------------- t (1 row) select has_table_privilege(t2.usesysid,'testtable','delete') from (select usesysid from pg_user where usename = 'postgres') as t2; has_table_privilege --------------------- t (1 row) select has_table_privilege('postgres',t1.oid,'rule') from (select oid from pg_class where relname = 'testtable') as t1; has_table_privilege --------------------- t (1 row) select has_table_privilege('postgres',t1.oid,'references') from (select oid from pg_class where relname = 'testtable') as t1; has_table_privilege --------------------- t (1 row) select has_table_privilege(t2.usesysid,t1.oid,'select') from (select oid from pg_class where relname = 'testtable') as t1,(select usesysid from pg_user where usename = 'postgres') as t2; has_table_privilege --------------------- t (1 row) select has_table_privilege(t2.usesysid,t1.oid,'insert') from (select oid from pg_class where relname = 'testtable') as t1,(select usesysid from pg_user where usename = 'postgres') as t2; has_table_privilege --------------------- t (1 row) select has_table_privilege('testtable','update'); has_table_privilege --------------------- t (1 row) select has_table_privilege('testtable','delete'); has_table_privilege --------------------- t (1 row) select has_table_privilege(t1.oid,'rule') from (select oid from pg_class where relname = 'testtable') as t1; has_table_privilege --------------------- t (1 row) select has_table_privilege(t1.oid,'trigger') from (select oid from pg_class where relname = 'testtable') as t1; has_table_privilege --------------------- t (1 row) create user foo; CREATE USER grant select on testtable to foo; CHANGE grant update on testtable to foo; CHANGE grant rule on testtable to foo; CHANGE You are now connected as new user foo. select has_table_privilege('foo','pg_class','select'); has_table_privilege --------------------- t (1 row) select has_table_privilege('foo','pg_class','insert'); has_table_privilege --------------------- f (1 row) select has_table_privilege(t2.usesysid,'pg_class','update') from (select usesysid from pg_user where usename = 'foo') as t2; has_table_privilege --------------------- f (1 row) select has_table_privilege(t2.usesysid,'pg_class','delete') from (select usesysid from pg_user where usename = 'foo') as t2; has_table_privilege --------------------- f (1 row) select has_table_privilege('foo',t1.oid,'rule') from (select oid from pg_class where relname = 'pg_class') as t1; has_table_privilege --------------------- f (1 row) select has_table_privilege('foo',t1.oid,'references') from (select oid from pg_class where relname = 'pg_class') as t1; has_table_privilege --------------------- f (1 row) select has_table_privilege(t2.usesysid,t1.oid,'select') from (select oid from pg_class where relname = 'pg_class') as t1,(select usesysid from pg_user where usename = 'foo') as t2; has_table_privilege --------------------- t (1 row) select has_table_privilege(t2.usesysid,t1.oid,'insert') from (select oid from pg_class where relname = 'pg_class') as t1,(select usesysid from pg_user where usename = 'foo') as t2; has_table_privilege --------------------- f (1 row) select has_table_privilege('pg_class','update'); has_table_privilege --------------------- f (1 row) select has_table_privilege('pg_class','delete'); has_table_privilege --------------------- f (1 row) select has_table_privilege(t1.oid,'select') from (select oid from pg_class where relname = 'pg_class') as t1; has_table_privilege --------------------- t (1 row) select has_table_privilege(t1.oid,'trigger') from (select oid from pg_class where relname = 'pg_class') as t1; has_table_privilege --------------------- f (1 row) select has_table_privilege('foo','testtable','select'); has_table_privilege --------------------- t (1 row) select has_table_privilege('foo','testtable','insert'); has_table_privilege --------------------- f (1 row) select has_table_privilege(t2.usesysid,'testtable','update') from (select usesysid from pg_user where usename = 'foo') as t2; has_table_privilege --------------------- t (1 row) select has_table_privilege(t2.usesysid,'testtable','delete') from (select usesysid from pg_user where usename = 'foo') as t2; has_table_privilege --------------------- f (1 row) select has_table_privilege('foo',t1.oid,'rule') from (select oid from pg_class where relname = 'testtable') as t1; has_table_privilege --------------------- t (1 row) select has_table_privilege('foo',t1.oid,'references') from (select oid from pg_class where relname = 'testtable') as t1; has_table_privilege --------------------- f (1 row) select has_table_privilege(t2.usesysid,t1.oid,'select') from (select oid from pg_class where relname = 'testtable') as t1,(select usesysid from pg_user where usename = 'foo') as t2; has_table_privilege --------------------- t (1 row) select has_table_privilege(t2.usesysid,t1.oid,'insert') from (select oid from pg_class where relname = 'testtable') as t1,(select usesysid from pg_user where usename = 'foo') as t2; has_table_privilege --------------------- f (1 row) select has_table_privilege('testtable','update'); has_table_privilege --------------------- t (1 row) select has_table_privilege('testtable','delete'); has_table_privilege --------------------- f (1 row) select has_table_privilege(t1.oid,'select') from (select oid from pg_class where relname = 'testtable') as t1; has_table_privilege --------------------- t (1 row) select has_table_privilege(t1.oid,'trigger') from (select oid from pg_class where relname = 'testtable') as t1; has_table_privilege --------------------- f (1 row) You are now connected as new user postgres. drop user foo; DROP USER drop table testtable; DROP