ก่อนอื่นต้องเป็น user ที่มีสิทธิ์เช้าถึง database และ schema โดยการรัน SQL นี้
SELECT nspname FROM pg_catalog.pg_namespace;
คำสั่งสำหรับ grant database
GRANT ALL PRIVILEGES ON DATABASE yourDBName to yourDBUser;
ALL PRIVILEGES หมายถึง SELECT
, INSERT
, UPDATE
, DELETE
, TRUNCATE
, REFERENCES
, TRIGGER
, CREATE
, CONNECT
, TEMPORARY
, EXECUTE
, และ USAGE
การจะ Grant table ได้ ต้องระบุ schema ที่ table นั้นๆ อยู่
คำสั่งสำหรับ grant table ในแต่ละ schema
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA schemaName TO yourDBUser
แล้วหากเรามีหลาย schema ล่ะ ทำไงดี execute ทีล่ะ schema ก็เป็นวิธีหนึ่ง แต่จะง่ายกว่าถ้าเรา loop เพื่อ execute ทีละ schema ซึ่ง postgres สามารถทำได้เลยผ่าน function
DO $do$
DECLARE
sch text;
BEGIN
FOR sch IN SELECT schema_name FROM information_schema.schemata
LOOP
EXECUTE format($$ GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA %I TO yourDBUser $$, sch);
END LOOP;
END;
$do$;
References