1
0
mirror of https://gitlab.com/depesz/explain.depesz.com.git synced 2024-11-24 08:42:27 +02:00
explain.depesz.com/sql/patch-007.sql
Hubert depesz Lubaczewski 5fc15d5ed8 Move to partitioned plans
We don't have that many of them, but on slow(ish) server dumps or vacuums
take long time. Partitioning will make it possible to handle work in
smaller increments
2016-04-05 14:57:53 +02:00

26 lines
1.1 KiB
PL/PgSQL

CREATE OR REPLACE FUNCTION register_plan(in_title text, in_plan text, in_is_public boolean, in_is_anonymized boolean, in_username text) RETURNS register_plan_return
LANGUAGE plpgsql
AS $$
DECLARE
use_hash_length int4 := 2;
reply register_plan_return;
use_sql TEXT;
BEGIN
reply.delete_key := get_random_string( 50 );
LOOP
reply.id := get_random_string(use_hash_length);
use_sql := format( 'INSERT INTO plans.%I (id, title, plan, is_public, entered_on, is_anonymized, delete_key, added_by) VALUES ($1, $2, $3, $4, now(), $5, $6, $7 )', 'part_' || substr(reply.id, 1, 1) );
BEGIN
execute use_sql using reply.id, in_title, in_plan, in_is_public, in_is_anonymized, reply.delete_key, in_username;
RETURN reply;
EXCEPTION WHEN unique_violation THEN
-- do nothing
END;
use_hash_length := use_hash_length + 1;
IF use_hash_length >= 30 THEN
raise exception 'Random string of length == 30 requested. something''s wrong.';
END IF;
END LOOP;
END;
$$;