create extension http with schema extensions;
create or replace function send_to_webhook() returns trigger AS $trigger$
declare
rec RECORD;
payload TEXT;
column_name TEXT;
column_value TEXT;
payload_items JSONB;
begin
-- Set record row depending on operation
CASE TG_OP
WHEN 'INSERT', 'UPDATE' THEN
rec := new;
WHEN 'DELETE' THEN
rec := old;
ELSE
RAISE EXCEPTION 'Unknown TG_OP: "%". Should not occur!', TG_OP;
END CASE;
payload_items := coalesce(row_to_json(rec),'{}')::jsonb;
-- Build the payload
payload := json_build_object(
'timestamp',CURRENT_TIMESTAMP,
'operation',TG_OP,
'schema',TG_TABLE_SCHEMA,
'table',TG_TABLE_NAME,
'data',payload_items
);
-- Notify the webhook
perform extensions.http((
'POST',
TG_ARGV[0]::varchar,
ARRAY[http_header('Authorization','Bearer ANON_KEY')],
'application/json',
payload::varchar
)::http_request);
return rec;
end;
$trigger$ language plpgsql;
create extension http with schema extensions;
create or replace function send_to_webhook() returns trigger AS $trigger$
declare
rec RECORD;
payload TEXT;
column_name TEXT;
column_value TEXT;
payload_items JSONB;
begin
-- Set record row depending on operation
CASE TG_OP
WHEN 'INSERT', 'UPDATE' THEN
rec := new;
WHEN 'DELETE' THEN
rec := old;
ELSE
RAISE EXCEPTION 'Unknown TG_OP: "%". Should not occur!', TG_OP;
END CASE;
payload_items := coalesce(row_to_json(rec),'{}')::jsonb;
-- Build the payload
payload := json_build_object(
'timestamp',CURRENT_TIMESTAMP,
'operation',TG_OP,
'schema',TG_TABLE_SCHEMA,
'table',TG_TABLE_NAME,
'data',payload_items
);
-- Notify the webhook
perform extensions.http((
'POST',
TG_ARGV[0]::varchar,
ARRAY[http_header('Authorization','Bearer ANON_KEY')],
'application/json',
payload::varchar
)::http_request);
return rec;
end;
$trigger$ language plpgsql;