Skip to content
This repository has been archived by the owner on Feb 14, 2018. It is now read-only.

Commit

Permalink
Initial SQL examples
Browse files Browse the repository at this point in the history
  • Loading branch information
Gavin M. Roy committed May 19, 2011
0 parents commit 8e5533e
Showing 1 changed file with 70 additions and 0 deletions.
70 changes: 70 additions & 0 deletions example.sql
@@ -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();

0 comments on commit 8e5533e

Please sign in to comment.