mirror of https://github.com/postgres/postgres
The OAT hooks are added in ALTER TABLE for the following subcommands: - { ENABLE | DISABLE | [NO] FORCE } ROW LEVEL SECURITY - { ENABLE | DISABLE } TRIGGER - { ENABLE | DISABLE } RULE. Note that there was hook for pg_rewrite, but not for relation ALTER'ed in pg_class. Tests are added to test_oat_hook for all the subcommand patterns gaining hooks here. Based on an ask from Legs Mansion. Discussion: https://postgr.es/m/tencent_083B3850655AC6EE04FA0A400766D3FE8309@qq.compull/140/head
parent
dca20013eb
commit
352ea3acf8
@ -0,0 +1,163 @@ |
||||
-- |
||||
-- OAT checks for ALTER TABLE |
||||
-- |
||||
-- This test script fails if debug_discard_caches is enabled, because cache |
||||
-- flushes cause extra calls of the OAT hook in recomputeNamespacePath, |
||||
-- resulting in more NOTICE messages than are in the expected output. |
||||
SET debug_discard_caches = 0; |
||||
LOAD 'test_oat_hooks'; |
||||
SET test_oat_hooks.audit = true; |
||||
NOTICE: in object_access_hook_str: superuser attempting alter (subId=0x1000, set) [test_oat_hooks.audit] |
||||
NOTICE: in object_access_hook_str: superuser finished alter (subId=0x1000, set) [test_oat_hooks.audit] |
||||
NOTICE: in process utility: superuser finished SET |
||||
CREATE SCHEMA test_oat_schema; |
||||
NOTICE: in process utility: superuser attempting CREATE SCHEMA |
||||
NOTICE: in object access: superuser attempting create (subId=0x0) [explicit] |
||||
NOTICE: in object access: superuser finished create (subId=0x0) [explicit] |
||||
NOTICE: in process utility: superuser finished CREATE SCHEMA |
||||
CREATE TABLE test_oat_schema.test_oat_tab (c1 int, c2 text); |
||||
NOTICE: in process utility: superuser attempting CREATE TABLE |
||||
NOTICE: in object access: superuser attempting namespace search (subId=0x0) [report on violation, allowed] |
||||
LINE 1: CREATE TABLE test_oat_schema.test_oat_tab (c1 int, c2 text); |
||||
^ |
||||
NOTICE: in object access: superuser finished namespace search (subId=0x0) [report on violation, allowed] |
||||
LINE 1: CREATE TABLE test_oat_schema.test_oat_tab (c1 int, c2 text); |
||||
^ |
||||
NOTICE: in object access: superuser attempting namespace search (subId=0x0) [no report on violation, allowed] |
||||
NOTICE: in object access: superuser finished namespace search (subId=0x0) [no report on violation, allowed] |
||||
NOTICE: in object access: superuser attempting namespace search (subId=0x0) [report on violation, allowed] |
||||
NOTICE: in object access: superuser finished namespace search (subId=0x0) [report on violation, allowed] |
||||
NOTICE: in object access: superuser attempting create (subId=0x0) [explicit] |
||||
NOTICE: in object access: superuser finished create (subId=0x0) [explicit] |
||||
NOTICE: in object access: superuser attempting create (subId=0x0) [explicit] |
||||
NOTICE: in object access: superuser finished create (subId=0x0) [explicit] |
||||
NOTICE: in object access: superuser attempting create (subId=0x0) [explicit] |
||||
NOTICE: in object access: superuser finished create (subId=0x0) [explicit] |
||||
NOTICE: in object access: superuser attempting create (subId=0x0) [internal] |
||||
NOTICE: in object access: superuser finished create (subId=0x0) [internal] |
||||
NOTICE: in object access: superuser attempting create (subId=0x0) [internal] |
||||
NOTICE: in object access: superuser finished create (subId=0x0) [internal] |
||||
NOTICE: in process utility: superuser finished CREATE TABLE |
||||
CREATE RULE test_oat_notify AS |
||||
ON UPDATE TO test_oat_schema.test_oat_tab |
||||
DO ALSO NOTIFY test_oat_tab; |
||||
NOTICE: in process utility: superuser attempting CREATE RULE |
||||
NOTICE: in object access: superuser attempting namespace search (subId=0x0) [report on violation, allowed] |
||||
NOTICE: in object access: superuser finished namespace search (subId=0x0) [report on violation, allowed] |
||||
NOTICE: in object access: superuser attempting namespace search (subId=0x0) [report on violation, allowed] |
||||
NOTICE: in object access: superuser finished namespace search (subId=0x0) [report on violation, allowed] |
||||
NOTICE: in object access: superuser attempting create (subId=0x0) [explicit] |
||||
NOTICE: in object access: superuser finished create (subId=0x0) [explicit] |
||||
NOTICE: in process utility: superuser finished CREATE RULE |
||||
CREATE FUNCTION test_oat_schema.test_trigger() |
||||
RETURNS trigger |
||||
LANGUAGE plpgsql |
||||
AS $$ |
||||
BEGIN |
||||
IF TG_OP = 'DELETE' |
||||
THEN |
||||
RETURN OLD; |
||||
ELSE |
||||
RETURN NEW; |
||||
END IF; |
||||
END; $$; |
||||
NOTICE: in process utility: superuser attempting CREATE FUNCTION |
||||
NOTICE: in object access: superuser attempting create (subId=0x0) [explicit] |
||||
NOTICE: in object access: superuser finished create (subId=0x0) [explicit] |
||||
NOTICE: in process utility: superuser finished CREATE FUNCTION |
||||
CREATE TRIGGER test_oat_trigger BEFORE INSERT ON test_oat_schema.test_oat_tab |
||||
FOR EACH STATEMENT EXECUTE FUNCTION test_oat_schema.test_trigger(); |
||||
NOTICE: in process utility: superuser attempting CREATE TRIGGER |
||||
NOTICE: in object access: superuser attempting namespace search (subId=0x0) [report on violation, allowed] |
||||
NOTICE: in object access: superuser finished namespace search (subId=0x0) [report on violation, allowed] |
||||
NOTICE: in object access: superuser attempting namespace search (subId=0x0) [report on violation, allowed] |
||||
NOTICE: in object access: superuser finished namespace search (subId=0x0) [report on violation, allowed] |
||||
NOTICE: in object access: superuser attempting create (subId=0x0) [explicit] |
||||
NOTICE: in object access: superuser finished create (subId=0x0) [explicit] |
||||
NOTICE: in process utility: superuser finished CREATE TRIGGER |
||||
-- RLS |
||||
ALTER TABLE test_oat_schema.test_oat_tab ENABLE ROW LEVEL SECURITY; |
||||
NOTICE: in process utility: superuser attempting ALTER TABLE |
||||
NOTICE: in object access: superuser attempting namespace search (subId=0x0) [report on violation, allowed] |
||||
NOTICE: in object access: superuser finished namespace search (subId=0x0) [report on violation, allowed] |
||||
NOTICE: in object access: superuser attempting alter (subId=0x0) [explicit without auxiliary object] |
||||
NOTICE: in object access: superuser finished alter (subId=0x0) [explicit without auxiliary object] |
||||
NOTICE: in process utility: superuser finished ALTER TABLE |
||||
ALTER TABLE test_oat_schema.test_oat_tab DISABLE ROW LEVEL SECURITY; |
||||
NOTICE: in process utility: superuser attempting ALTER TABLE |
||||
NOTICE: in object access: superuser attempting namespace search (subId=0x0) [report on violation, allowed] |
||||
NOTICE: in object access: superuser finished namespace search (subId=0x0) [report on violation, allowed] |
||||
NOTICE: in object access: superuser attempting alter (subId=0x0) [explicit without auxiliary object] |
||||
NOTICE: in object access: superuser finished alter (subId=0x0) [explicit without auxiliary object] |
||||
NOTICE: in process utility: superuser finished ALTER TABLE |
||||
ALTER TABLE test_oat_schema.test_oat_tab FORCE ROW LEVEL SECURITY; |
||||
NOTICE: in process utility: superuser attempting ALTER TABLE |
||||
NOTICE: in object access: superuser attempting namespace search (subId=0x0) [report on violation, allowed] |
||||
NOTICE: in object access: superuser finished namespace search (subId=0x0) [report on violation, allowed] |
||||
NOTICE: in object access: superuser attempting alter (subId=0x0) [explicit without auxiliary object] |
||||
NOTICE: in object access: superuser finished alter (subId=0x0) [explicit without auxiliary object] |
||||
NOTICE: in process utility: superuser finished ALTER TABLE |
||||
ALTER TABLE test_oat_schema.test_oat_tab NO FORCE ROW LEVEL SECURITY; |
||||
NOTICE: in process utility: superuser attempting ALTER TABLE |
||||
NOTICE: in object access: superuser attempting namespace search (subId=0x0) [report on violation, allowed] |
||||
NOTICE: in object access: superuser finished namespace search (subId=0x0) [report on violation, allowed] |
||||
NOTICE: in object access: superuser attempting alter (subId=0x0) [explicit without auxiliary object] |
||||
NOTICE: in object access: superuser finished alter (subId=0x0) [explicit without auxiliary object] |
||||
NOTICE: in process utility: superuser finished ALTER TABLE |
||||
-- Rules |
||||
ALTER TABLE test_oat_schema.test_oat_tab DISABLE RULE test_oat_notify; |
||||
NOTICE: in process utility: superuser attempting ALTER TABLE |
||||
NOTICE: in object access: superuser attempting namespace search (subId=0x0) [report on violation, allowed] |
||||
NOTICE: in object access: superuser finished namespace search (subId=0x0) [report on violation, allowed] |
||||
NOTICE: in object access: superuser attempting alter (subId=0x0) [explicit without auxiliary object] |
||||
NOTICE: in object access: superuser finished alter (subId=0x0) [explicit without auxiliary object] |
||||
NOTICE: in object access: superuser attempting alter (subId=0x0) [explicit without auxiliary object] |
||||
NOTICE: in object access: superuser finished alter (subId=0x0) [explicit without auxiliary object] |
||||
NOTICE: in process utility: superuser finished ALTER TABLE |
||||
ALTER TABLE test_oat_schema.test_oat_tab ENABLE RULE test_oat_notify; |
||||
NOTICE: in process utility: superuser attempting ALTER TABLE |
||||
NOTICE: in object access: superuser attempting namespace search (subId=0x0) [report on violation, allowed] |
||||
NOTICE: in object access: superuser finished namespace search (subId=0x0) [report on violation, allowed] |
||||
NOTICE: in object access: superuser attempting alter (subId=0x0) [explicit without auxiliary object] |
||||
NOTICE: in object access: superuser finished alter (subId=0x0) [explicit without auxiliary object] |
||||
NOTICE: in object access: superuser attempting alter (subId=0x0) [explicit without auxiliary object] |
||||
NOTICE: in object access: superuser finished alter (subId=0x0) [explicit without auxiliary object] |
||||
NOTICE: in process utility: superuser finished ALTER TABLE |
||||
-- Triggers |
||||
ALTER TABLE test_oat_schema.test_oat_tab DISABLE TRIGGER test_oat_trigger; |
||||
NOTICE: in process utility: superuser attempting ALTER TABLE |
||||
NOTICE: in object access: superuser attempting namespace search (subId=0x0) [report on violation, allowed] |
||||
NOTICE: in object access: superuser finished namespace search (subId=0x0) [report on violation, allowed] |
||||
NOTICE: in object access: superuser attempting alter (subId=0x0) [explicit without auxiliary object] |
||||
NOTICE: in object access: superuser finished alter (subId=0x0) [explicit without auxiliary object] |
||||
NOTICE: in object access: superuser attempting alter (subId=0x0) [explicit without auxiliary object] |
||||
NOTICE: in object access: superuser finished alter (subId=0x0) [explicit without auxiliary object] |
||||
NOTICE: in process utility: superuser finished ALTER TABLE |
||||
ALTER TABLE test_oat_schema.test_oat_tab ENABLE TRIGGER test_oat_trigger; |
||||
NOTICE: in process utility: superuser attempting ALTER TABLE |
||||
NOTICE: in object access: superuser attempting namespace search (subId=0x0) [report on violation, allowed] |
||||
NOTICE: in object access: superuser finished namespace search (subId=0x0) [report on violation, allowed] |
||||
NOTICE: in object access: superuser attempting alter (subId=0x0) [explicit without auxiliary object] |
||||
NOTICE: in object access: superuser finished alter (subId=0x0) [explicit without auxiliary object] |
||||
NOTICE: in object access: superuser attempting alter (subId=0x0) [explicit without auxiliary object] |
||||
NOTICE: in object access: superuser finished alter (subId=0x0) [explicit without auxiliary object] |
||||
NOTICE: in process utility: superuser finished ALTER TABLE |
||||
DROP TABLE test_oat_schema.test_oat_tab; |
||||
NOTICE: in process utility: superuser attempting DROP TABLE |
||||
NOTICE: in object access: superuser attempting namespace search (subId=0x0) [report on violation, allowed] |
||||
NOTICE: in object access: superuser finished namespace search (subId=0x0) [report on violation, allowed] |
||||
NOTICE: in object access: superuser attempting drop (subId=0x0) [] |
||||
NOTICE: in object access: superuser finished drop (subId=0x0) [] |
||||
NOTICE: in object access: superuser attempting drop (subId=0x0) [] |
||||
NOTICE: in object access: superuser finished drop (subId=0x0) [] |
||||
NOTICE: in object access: superuser attempting drop (subId=0x0) [] |
||||
NOTICE: in object access: superuser finished drop (subId=0x0) [] |
||||
NOTICE: in object access: superuser attempting drop (subId=0x0) [] |
||||
NOTICE: in object access: superuser finished drop (subId=0x0) [] |
||||
NOTICE: in object access: superuser attempting drop (subId=0x0) [] |
||||
NOTICE: in object access: superuser finished drop (subId=0x0) [] |
||||
NOTICE: in object access: superuser attempting drop (subId=0x0) [] |
||||
NOTICE: in object access: superuser finished drop (subId=0x0) [] |
||||
NOTICE: in object access: superuser attempting drop (subId=0x0) [] |
||||
NOTICE: in object access: superuser finished drop (subId=0x0) [] |
||||
NOTICE: in process utility: superuser finished DROP TABLE |
@ -0,0 +1,48 @@ |
||||
-- |
||||
-- OAT checks for ALTER TABLE |
||||
-- |
||||
|
||||
-- This test script fails if debug_discard_caches is enabled, because cache |
||||
-- flushes cause extra calls of the OAT hook in recomputeNamespacePath, |
||||
-- resulting in more NOTICE messages than are in the expected output. |
||||
SET debug_discard_caches = 0; |
||||
|
||||
LOAD 'test_oat_hooks'; |
||||
SET test_oat_hooks.audit = true; |
||||
|
||||
CREATE SCHEMA test_oat_schema; |
||||
CREATE TABLE test_oat_schema.test_oat_tab (c1 int, c2 text); |
||||
CREATE RULE test_oat_notify AS |
||||
ON UPDATE TO test_oat_schema.test_oat_tab |
||||
DO ALSO NOTIFY test_oat_tab; |
||||
|
||||
CREATE FUNCTION test_oat_schema.test_trigger() |
||||
RETURNS trigger |
||||
LANGUAGE plpgsql |
||||
AS $$ |
||||
BEGIN |
||||
IF TG_OP = 'DELETE' |
||||
THEN |
||||
RETURN OLD; |
||||
ELSE |
||||
RETURN NEW; |
||||
END IF; |
||||
END; $$; |
||||
CREATE TRIGGER test_oat_trigger BEFORE INSERT ON test_oat_schema.test_oat_tab |
||||
FOR EACH STATEMENT EXECUTE FUNCTION test_oat_schema.test_trigger(); |
||||
|
||||
-- RLS |
||||
ALTER TABLE test_oat_schema.test_oat_tab ENABLE ROW LEVEL SECURITY; |
||||
ALTER TABLE test_oat_schema.test_oat_tab DISABLE ROW LEVEL SECURITY; |
||||
ALTER TABLE test_oat_schema.test_oat_tab FORCE ROW LEVEL SECURITY; |
||||
ALTER TABLE test_oat_schema.test_oat_tab NO FORCE ROW LEVEL SECURITY; |
||||
|
||||
-- Rules |
||||
ALTER TABLE test_oat_schema.test_oat_tab DISABLE RULE test_oat_notify; |
||||
ALTER TABLE test_oat_schema.test_oat_tab ENABLE RULE test_oat_notify; |
||||
|
||||
-- Triggers |
||||
ALTER TABLE test_oat_schema.test_oat_tab DISABLE TRIGGER test_oat_trigger; |
||||
ALTER TABLE test_oat_schema.test_oat_tab ENABLE TRIGGER test_oat_trigger; |
||||
|
||||
DROP TABLE test_oat_schema.test_oat_tab; |
Loading…
Reference in new issue