This repository has been archived by the owner on Feb 14, 2018. It is now read-only.
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Gavin M. Roy
committed
May 19, 2011
0 parents
commit 8e5533e
Showing
1 changed file
with
70 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
-- Insert a row into pg_amqp's definition table | ||
INSERT INTO amqp.broker (host, vhost, username, "password") VALUES ('localhost', '/', 'guest', 'guest'); | ||
|
||
-- Table | ||
|
||
CREATE TABLE presentation_example | ||
( | ||
row_id serial NOT NULL, | ||
occurred_at timestamp with time zone NOT NULL DEFAULT now(), | ||
payload text | ||
) | ||
WITH ( | ||
OIDS=FALSE | ||
); | ||
|
||
-- Trigger Function | ||
|
||
CREATE OR REPLACE FUNCTION demo_trigger() RETURNS trigger AS | ||
$demo_trigger$ | ||
DECLARE | ||
message text := '{"undefined": True}'; | ||
result record; | ||
BEGIN | ||
IF TG_OP = 'DELETE' THEN | ||
message := $message${$message$ || | ||
$message$"operation": "delete", $message$ || | ||
$message$"event_time": "$message$ || CURRENT_TIMESTAMP || $message$",$message$ || | ||
$message$"data": { $message$ || | ||
$message$"row_id": $message$ || OLD.row_id || $message$,$message$ || | ||
$message$"occurred_at": "$message$||OLD.occurred_at || $message$",$message$ || | ||
$message$"payload": "$message$ || OLD.payload || $message$"$message$ || | ||
$message$ } }$message$; | ||
ELSIF TG_OP = 'UPDATE' THEN | ||
message := $message${$message$ || | ||
$message$"operation": "update", $message$ || | ||
$message$"event_time": "$message$ || CURRENT_TIMESTAMP || $message$",$message$ || | ||
$message$"old": { $message$ || | ||
$message$"row_id": $message$ || OLD.row_id || $message$,$message$ || | ||
$message$"occurred_at": "$message$||OLD.occurred_at || $message$",$message$ || | ||
$message$"payload": "$message$ || OLD.payload || $message$"$message$ || | ||
$message$ },$message$ || | ||
$message$"new": { $message$ || | ||
$message$"row_id": $message$ || NEW.row_id || $message$,$message$ || | ||
$message$"occurred_at": "$message$||NEW.occurred_at || $message$",$message$ || | ||
$message$"payload": "$message$ || NEW.payload || $message$"$message$ || | ||
$message$ } }$message$; | ||
ELSIF TG_OP = 'INSERT' THEN | ||
message := $message${$message$ || | ||
$message$"operation": "insert", $message$ || | ||
$message$"event_time": "$message$ || CURRENT_TIMESTAMP || $message$",$message$ || | ||
$message$"data": { $message$ || | ||
$message$"row_id": $message$ || NEW.row_id || $message$,$message$ || | ||
$message$"occurred_at": "$message$|| NEW.occurred_at || $message$",$message$ || | ||
$message$"payload": "$message$ || NEW.payload || $message$"$message$ || | ||
$message$ } }$message$; | ||
END IF; | ||
RAISE NOTICE 'Message: %', message; | ||
SELECT amqp.publish(1, 'postgres', 'publish_transactions', message) INTO result; | ||
RAISE NOTICE 'Result: %', result; | ||
RETURN NULL; | ||
END; | ||
$demo_trigger$ LANGUAGE plpgsql; | ||
|
||
-- Add the trigger | ||
|
||
CREATE TRIGGER demo_trigger_event | ||
AFTER INSERT OR UPDATE OR DELETE | ||
ON presentation_example | ||
FOR EACH ROW | ||
EXECUTE PROCEDURE demo_trigger(); |