68 lines
1.4 KiB
PL/PgSQL
68 lines
1.4 KiB
PL/PgSQL
-- Enable Extensions
|
|
CREATE EXTENSION IF NOT EXISTS pg_cron;
|
|
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
|
|
|
|
-- Create table
|
|
CREATE TABLE if NOT EXISTS auctions (
|
|
id UUID PRIMARY KEY,
|
|
auctionid VARCHAR(255) NOT NULL,
|
|
lbin DECIMAL(65,5),
|
|
modified TIMESTAMP(2),
|
|
UNIQUE (auctionid)
|
|
);
|
|
|
|
-- Update trigger function
|
|
CREATE OR REPLACE FUNCTION public.fn_update_modified_column()
|
|
RETURNS TRIGGER AS $$
|
|
BEGIN
|
|
NEW.modified = now();
|
|
RETURN NEW;
|
|
END;
|
|
$$ language 'plpgsql';
|
|
|
|
-- Update trigger
|
|
DROP TRIGGER IF EXISTS update_auction_modtime on auctions;
|
|
CREATE TRIGGER update_auction_modtime
|
|
BEFORE UPDATE ON auctions
|
|
FOR EACH ROW
|
|
EXECUTE PROCEDURE public.fn_update_modified_column();
|
|
|
|
-- Cleanup function
|
|
CREATE OR REPLACE FUNCTION public.cleanup_old_entries()
|
|
RETURNS void
|
|
LANGUAGE plpgsql
|
|
AS $$
|
|
DECLARE
|
|
temp_id UUID;
|
|
BEGIN
|
|
FOR temp_id IN
|
|
SELECT id
|
|
FROM auctions
|
|
WHERE EXTRACT(EPOCH FROM (NOW() - modified))/3600 >= 6 -- 6 hours
|
|
LOOP
|
|
DELETE FROM auctions
|
|
WHERE auctions.id = temp_id;
|
|
END LOOP;
|
|
|
|
RETURN;
|
|
END;
|
|
$$;
|
|
|
|
-- Add job to pg_cron
|
|
DO $outer$
|
|
DECLARE job_exists boolean := false;
|
|
BEGIN
|
|
SELECT (count(*) > 0)
|
|
INTO job_exists
|
|
FROM cron.job
|
|
WHERE jobname = 'cleanup_old_entries_event';
|
|
|
|
IF NOT job_exists THEN
|
|
PERFORM cron.schedule(
|
|
'cleanup_old_entries_event',
|
|
'*/2 * * * *',
|
|
$sql$ SELECT public.cleanup_old_entries(); $sql$
|
|
);
|
|
END IF;
|
|
END;
|
|
$outer$;
|