@@ -386,3 +386,103 @@ select * from trigtest;
386
386
387
387
drop table trigtest2;
388
388
drop table trigtest;
389
+ -- dump trigger data
390
+ CREATE TABLE trigger_test (
391
+ i int,
392
+ v varchar
393
+ );
394
+ CREATE OR REPLACE FUNCTION trigger_data() RETURNS trigger
395
+ LANGUAGE plpgsql AS $$
396
+
397
+ declare
398
+
399
+ argstr text;
400
+ relid text;
401
+
402
+ begin
403
+
404
+ relid := TG_relid::regclass;
405
+
406
+ -- plpgsql can't discover it's trigger data in a hash like perl and python
407
+ -- can, or by a sort of reflection like tcl can,
408
+ -- so we have to hard code the names.
409
+ raise NOTICE 'TG_NAME: %', TG_name;
410
+ raise NOTICE 'TG_WHEN: %', TG_when;
411
+ raise NOTICE 'TG_LEVEL: %', TG_level;
412
+ raise NOTICE 'TG_OP: %', TG_op;
413
+ raise NOTICE 'TG_RELID::regclass: %', relid;
414
+ raise NOTICE 'TG_RELNAME: %', TG_relname;
415
+ raise NOTICE 'TG_TABLE_NAME: %', TG_table_name;
416
+ raise NOTICE 'TG_TABLE_SCHEMA: %', TG_table_schema;
417
+ raise NOTICE 'TG_NARGS: %', TG_nargs;
418
+
419
+ argstr := '[';
420
+ for i in 0 .. TG_nargs - 1 loop
421
+ if i > 0 then
422
+ argstr := argstr || ', ';
423
+ end if;
424
+ argstr := argstr || TG_argv[i];
425
+ end loop;
426
+ argstr := argstr || ']';
427
+ raise NOTICE 'TG_ARGV: %', argstr;
428
+
429
+ if TG_OP != 'INSERT' then
430
+ raise NOTICE 'OLD: %', OLD;
431
+ end if;
432
+
433
+ if TG_OP != 'DELETE' then
434
+ raise NOTICE 'NEW: %', NEW;
435
+ end if;
436
+ if TG_OP = 'DELETE' then
437
+ return OLD;
438
+ else
439
+ return NEW;
440
+ end if;
441
+
442
+ end;
443
+ $$;
444
+ CREATE TRIGGER show_trigger_data_trig
445
+ BEFORE INSERT OR UPDATE OR DELETE ON trigger_test
446
+ FOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');
447
+ insert into trigger_test values(1,'insert');
448
+ NOTICE: TG_NAME: show_trigger_data_trig
449
+ NOTICE: TG_WHEN: BEFORE
450
+ NOTICE: TG_LEVEL: ROW
451
+ NOTICE: TG_OP: INSERT
452
+ NOTICE: TG_RELID::regclass: trigger_test
453
+ NOTICE: TG_RELNAME: trigger_test
454
+ NOTICE: TG_TABLE_NAME: trigger_test
455
+ NOTICE: TG_TABLE_SCHEMA: public
456
+ NOTICE: TG_NARGS: 2
457
+ NOTICE: TG_ARGV: [23, skidoo]
458
+ NOTICE: NEW: (1,insert)
459
+ update trigger_test set v = 'update' where i = 1;
460
+ NOTICE: TG_NAME: show_trigger_data_trig
461
+ NOTICE: TG_WHEN: BEFORE
462
+ NOTICE: TG_LEVEL: ROW
463
+ NOTICE: TG_OP: UPDATE
464
+ NOTICE: TG_RELID::regclass: trigger_test
465
+ NOTICE: TG_RELNAME: trigger_test
466
+ NOTICE: TG_TABLE_NAME: trigger_test
467
+ NOTICE: TG_TABLE_SCHEMA: public
468
+ NOTICE: TG_NARGS: 2
469
+ NOTICE: TG_ARGV: [23, skidoo]
470
+ NOTICE: OLD: (1,insert)
471
+ NOTICE: NEW: (1,update)
472
+ delete from trigger_test;
473
+ NOTICE: TG_NAME: show_trigger_data_trig
474
+ NOTICE: TG_WHEN: BEFORE
475
+ NOTICE: TG_LEVEL: ROW
476
+ NOTICE: TG_OP: DELETE
477
+ NOTICE: TG_RELID::regclass: trigger_test
478
+ NOTICE: TG_RELNAME: trigger_test
479
+ NOTICE: TG_TABLE_NAME: trigger_test
480
+ NOTICE: TG_TABLE_SCHEMA: public
481
+ NOTICE: TG_NARGS: 2
482
+ NOTICE: TG_ARGV: [23, skidoo]
483
+ NOTICE: OLD: (1,update)
484
+
485
+ DROP TRIGGER show_trigger_data_trig on trigger_test;
486
+
487
+ DROP FUNCTION trigger_data();
488
+ DROP TABLE trigger_test;
0 commit comments