@@ -4164,19 +4164,19 @@ query TT colnames
41644164SHOW CREATE TRIGGER tr ON t;
41654165----
41664166trigger_name create_statement
4167- tr CREATE TRIGGER tr AFTER INSERT ON test. public.t FOR EACH ROW EXECUTE FUNCTION test. public.g()
4167+ tr CREATE TRIGGER tr AFTER INSERT ON public.t FOR EACH ROW EXECUTE FUNCTION public.g()
41684168
41694169query TT colnames
41704170SHOW CREATE TRIGGER tr2 ON t;
41714171----
41724172trigger_name create_statement
4173- tr2 CREATE TRIGGER tr2 BEFORE UPDATE ON test. public.t FOR EACH ROW EXECUTE FUNCTION test. public.g()
4173+ tr2 CREATE TRIGGER tr2 BEFORE UPDATE ON public.t FOR EACH ROW EXECUTE FUNCTION public.g()
41744174
41754175query TT colnames
41764176SHOW CREATE TRIGGER tr3 ON t;
41774177----
41784178trigger_name create_statement
4179- tr3 CREATE TRIGGER tr3 AFTER INSERT OR UPDATE ON test. public.t FOR EACH ROW WHEN (new).a < 5:::INT8 EXECUTE FUNCTION test. public.g()
4179+ tr3 CREATE TRIGGER tr3 AFTER INSERT OR UPDATE ON public.t FOR EACH ROW WHEN (new).a < 5:::INT8 EXECUTE FUNCTION public.g()
41804180
41814181statement ok
41824182DROP TRIGGER tr ON t;
@@ -4564,7 +4564,7 @@ CREATE OR REPLACE TRIGGER replace_test BEFORE INSERT ON xy FOR EACH ROW EXECUTE
45644564query TT
45654565SHOW CREATE TRIGGER replace_test ON xy;
45664566----
4567- replace_test CREATE TRIGGER replace_test BEFORE INSERT ON test. public.xy FOR EACH ROW EXECUTE FUNCTION test. public.f()
4567+ replace_test CREATE TRIGGER replace_test BEFORE INSERT ON public.xy FOR EACH ROW EXECUTE FUNCTION public.f()
45684568
45694569# CREATE OR REPLACE TRIGGER when the trigger already exists replaces it.
45704570statement ok
@@ -4573,7 +4573,7 @@ CREATE OR REPLACE TRIGGER replace_test AFTER UPDATE ON xy FOR EACH ROW EXECUTE F
45734573query TT
45744574SHOW CREATE TRIGGER replace_test ON xy;
45754575----
4576- replace_test CREATE TRIGGER replace_test AFTER UPDATE ON test. public.xy FOR EACH ROW EXECUTE FUNCTION test. public.f()
4576+ replace_test CREATE TRIGGER replace_test AFTER UPDATE ON public.xy FOR EACH ROW EXECUTE FUNCTION public.f()
45774577
45784578# CREATE TRIGGER (without REPLACE) still errors on duplicate.
45794579statement error pgcode 42710 pq: trigger "replace_test" for relation "xy" already exists
@@ -4978,11 +4978,11 @@ WHERE tgrelid = 'test_triggers'::regclass
49784978ORDER BY tgname;
49794979----
49804980tgname tgtype has_func_oid tgnargs tgenabled tgoldtable tgnewtable
4981- after_delete_row 9 true 0 A NULL NULL
4982- after_insert_row 5 true 0 A NULL NULL
4983- before_update_row 19 true 0 A NULL NULL
4984- multi_event_trigger 31 true 0 A NULL NULL
4985- trigger_with_args 5 true 3 A NULL NULL
4981+ after_delete_row 9 true 0 O NULL NULL
4982+ after_insert_row 5 true 0 O NULL NULL
4983+ before_update_row 19 true 0 O NULL NULL
4984+ multi_event_trigger 31 true 0 O NULL NULL
4985+ trigger_with_args 5 true 3 O NULL NULL
49864986
49874987# Test INSTEAD OF triggers (not yet implemented)
49884988statement error pgcode 42809 "test_triggers" is a table\nDETAIL: Tables cannot have INSTEAD OF triggers.
@@ -5075,6 +5075,28 @@ WHERE tgrelid = 'other_schema.test_table'::regclass;
50755075tgname table_name trigger_func_name
50765076other_schema_trigger test_table trigger_func1
50775077
5078+ # Test that pg_class.relhastriggers reflects the presence of triggers.
5079+ query TB colnames,rowsort
5080+ SELECT relname, relhastriggers
5081+ FROM pg_catalog.pg_class
5082+ WHERE relname IN ('test_triggers', 'audit_log', 'test_table');
5083+ ----
5084+ relname relhastriggers
5085+ audit_log false
5086+ test_table true
5087+ test_triggers true
5088+
5089+ # pg_tables.hastriggers should agree with pg_class.relhastriggers.
5090+ query TB colnames,rowsort
5091+ SELECT tablename, hastriggers
5092+ FROM pg_catalog.pg_tables
5093+ WHERE tablename IN ('test_triggers', 'audit_log', 'test_table');
5094+ ----
5095+ tablename hastriggers
5096+ audit_log false
5097+ test_table true
5098+ test_triggers true
5099+
50785100# Clean up
50795101statement ok
50805102DROP TABLE test_triggers CASCADE;
@@ -5141,12 +5163,12 @@ CREATE TRIGGER insert_trigger
51415163 FOR EACH ROW
51425164 EXECUTE FUNCTION audit_trigger_func();
51435165
5144- # Verify trigger is enabled by default (tgenabled = 'A ' for always ).
5166+ # Verify trigger is enabled by default (tgenabled = 'O ' for origin ).
51455167skipif config local-mixed-25.4 local-mixed-26.1
51465168query T
51475169SELECT tgenabled FROM pg_trigger WHERE tgname = 'insert_trigger';
51485170----
5149- A
5171+ O
51505172
51515173# SHOW TRIGGERS should also report enabled = true.
51525174skipif config local-mixed-25.4 local-mixed-26.1
@@ -5205,7 +5227,7 @@ skipif config local-mixed-25.4 local-mixed-26.1
52055227query T
52065228SELECT tgenabled FROM pg_trigger WHERE tgname = 'insert_trigger';
52075229----
5208- A
5230+ O
52095231
52105232# Insert another row - trigger should fire again.
52115233skipif config local-mixed-25.4 local-mixed-26.1
@@ -5247,7 +5269,7 @@ skipif config local-mixed-25.4 local-mixed-26.1
52475269query T
52485270SELECT tgenabled FROM pg_trigger WHERE tgname = 'insert_trigger';
52495271----
5250- A
5272+ O
52515273
52525274# Test error when trigger doesn't exist.
52535275skipif config local-mixed-25.4 local-mixed-26.1
@@ -5272,8 +5294,8 @@ skipif config local-mixed-25.4 local-mixed-26.1
52725294query TT rowsort
52735295SELECT tgname, tgenabled FROM pg_trigger WHERE tgrelid = 'enable_disable_t'::regclass ORDER BY tgname;
52745296----
5275- insert_trigger A
5276- update_trigger A
5297+ insert_trigger O
5298+ update_trigger O
52775299
52785300# Insert and update - both triggers should fire.
52795301skipif config local-mixed-25.4 local-mixed-26.1
@@ -5340,8 +5362,8 @@ skipif config local-mixed-25.4 local-mixed-26.1
53405362query TT rowsort
53415363SELECT tgname, tgenabled FROM pg_trigger WHERE tgrelid = 'enable_disable_t'::regclass ORDER BY tgname;
53425364----
5343- insert_trigger A
5344- update_trigger A
5365+ insert_trigger O
5366+ update_trigger O
53455367
53465368# Both triggers should fire again.
53475369skipif config local-mixed-25.4 local-mixed-26.1
@@ -5374,7 +5396,7 @@ query TT rowsort
53745396SELECT tgname, tgenabled FROM pg_trigger WHERE tgrelid = 'enable_disable_t'::regclass ORDER BY tgname;
53755397----
53765398insert_trigger D
5377- update_trigger A
5399+ update_trigger O
53785400
53795401# Insert and update - only update trigger should fire.
53805402skipif config local-mixed-25.4 local-mixed-26.1
@@ -5431,8 +5453,8 @@ skipif config local-mixed-25.4 local-mixed-26.1
54315453query TT rowsort
54325454SELECT tgname, tgenabled FROM pg_trigger WHERE tgrelid = 'enable_disable_t'::regclass ORDER BY tgname;
54335455----
5434- insert_trigger A
5435- update_trigger A
5456+ insert_trigger O
5457+ update_trigger O
54365458
54375459# Test that ALL/USER on a table with no triggers is a no-op.
54385460skipif config local-mixed-25.4 local-mixed-26.1
@@ -5471,8 +5493,8 @@ skipif config local-mixed-25.4 local-mixed-26.1
54715493query TT rowsort
54725494SELECT tgname, tgenabled FROM pg_trigger WHERE tgrelid = 'enable_disable_t'::regclass ORDER BY tgname;
54735495----
5474- insert_trigger A
5475- update_trigger A
5496+ insert_trigger O
5497+ update_trigger O
54765498
54775499# Test with IF EXISTS on table.
54785500skipif config local-mixed-25.4 local-mixed-26.1
0 commit comments