@@ -386,3 +386,103 @@ select * from trigtest;
386386
387387drop table trigtest2;
388388drop 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;