In the previous article , an example was considered with spatial objects and the separation of access to them by users.CREATE TABLE audit_building AS SELECT * FROM building1; ALTER TABLE audit_building ADD COLUMN operation char(1); -- , ALTER TABLE audit_building ADD COLUMN stamp timestamp; -- ALTER TABLE audit_building ADD COLUMN userid text; -- CREATE OR REPLACE FUNCTION process_emp_audit() RETURNS TRIGGER AS $audit_building$ BEGIN IF (TG_OP = 'DELETE') THEN INSERT INTO audit_building SELECT 'D', now(), user, OLD.*; RETURN OLD; ELSIF (TG_OP = 'UPDATE') THEN INSERT INTO audit_building SELECT 'U', now(), user, NEW.*; RETURN NEW; ELSIF (TG_OP = 'INSERT') THEN INSERT INTO audit_building SELECT 'I', now(), user, NEW.*; RETURN NEW; END IF; RETURN NULL; END; $audit_building$ LANGUAGE plpgsql; CREATE TRIGGER audit_building AFTER INSERT OR UPDATE OR DELETE ON building1 FOR EACH ROW EXECUTE PROCEDURE process_emp_audit(); GRANT SELECT ON audit_building TO user2; 
Source: https://habr.com/ru/post/137161/
All Articles