Example:
-- Table: joe_event_table
-- DROP TABLE joe_event_table;
CREATE TABLE joe_event_table
(
originating_event character varying NOT NULL,
event_time timestamp with time zone NOT NULL,
event_text character varying,
event_query character varying,
database_user character varying NOT NULL,
triggering_table character varying NOT NULL,
event_id serial NOT NULL,
CONSTRAINT joe_event_table_pkey PRIMARY KEY (event_id),
CONSTRAINT joe_event_table_event_id_key UNIQUE (event_id)
)
WITH (OIDS=FALSE);
-- Function: poll_new_protocols()
-- DROP FUNCTION poll_new_protocols();
CREATE OR REPLACE FUNCTION poll_new_protocols()
RETURNS void AS
$BODY$DECLARE
inserted_row source.protocol%ROWTYPE;
BEGIN
IF NOT EXISTS(SELECT tablename FROM pg_catalog.pg_tables WHERE
tablename = 'protocol_previous' AND schemaname ='source') THEN
CREATE TABLE source.protocol_previous AS SELECT protocol_id FROM source.protocol;
END IF;
FOR inserted_row IN SELECT * FROM source.protocol WHERE protocol_id NOT IN
(SELECT protocol_id FROM source.protocol_previous WHERE protocol_id IS NOT NULL)
LOOP
INSERT INTO joe_event_table
VALUES
(
'poll_new_protocols',
now(),
'New Protocol',
'New Protocol - ' || inserted_row.tla,
CURRENT_USER,
'source.protocol'
);
INSERT INTO source.protocol_previous VALUES ( inserted_row.protocol_id);
END LOOP;
END;$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;
Sample run:
SELECT * FROM poll_new_protocols();
DELETE FROM source.protocol_previous WHERE protocol_id=12;
DELETE FROM source.protocol_previous WHERE protocol_id=24;
SELECT * FROM poll_new_protocols();
INSERT INTO joe_event_table
(originating_event, event_time, event_text, event_query, database_user, triggering_table, event_id)
VALUES
('poll_new_protocols', '2009-04-06 14:08:41.007-07', 'New Protocol', 'New Protocol - v041', 'slangley', 'source.protocol', 1);
INSERT INTO joe_event_table
(originating_event, event_time, event_text, event_query, database_user, triggering_table, event_id)
VALUES
('poll_new_protocols', '2009-04-06 14:08:41.007-07', 'New Protocol', 'New Protocol - h021', 'slangley', 'source.protocol', 2);
Advantages:
Disadvantages:
Example:
CREATE OR REPLACE FUNCTION getnewprotocol()
RETURNS trigger AS
$BODY$
BEGIN
INSERT INTO joe_event_table
VALUES
(
TG_NAME,
now(),
'New Protocol,
'New Protocol - ' || inserted_row.tla,
CURRENT_USER,
TG_RELNAME
);
RETURN NULL;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;
CREATE TRIGGER new_protocol
AFTER INSERT
ON source.protocol
FOR EACH ROW
EXECUTE PROCEDURE getnewprotocol();
Advantages:
Disadvantages:
Advantages:
Disadvantages:
-- ScottLangley - 31 Mar 2009