Files
geMoldInsight/scripts/db/010_partitioning_template.sql
T

38 lines
1.1 KiB
SQL
Raw Normal View History

2026-03-25 23:59:29 +08:00
DO $$
BEGIN
IF to_regclass('sales_orders_p') IS NULL THEN
EXECUTE $q$
CREATE TABLE sales_orders_p (
LIKE sales_orders INCLUDING ALL
) PARTITION BY RANGE (order_date)
$q$;
END IF;
IF to_regclass('purchase_orders_p') IS NULL THEN
EXECUTE $q$
CREATE TABLE purchase_orders_p (
LIKE purchase_orders INCLUDING ALL
) PARTITION BY RANGE (order_date)
$q$;
END IF;
END $$;
DO $$
DECLARE
d date := date_trunc('month', now())::date;
next_d date := (date_trunc('month', now()) + interval '1 month')::date;
part_name text;
BEGIN
part_name := format('sales_orders_p_%s', to_char(d, 'YYYYMM'));
EXECUTE format(
'CREATE TABLE IF NOT EXISTS %I PARTITION OF sales_orders_p FOR VALUES FROM (%L) TO (%L)',
part_name, d, next_d
);
part_name := format('purchase_orders_p_%s', to_char(d, 'YYYYMM'));
EXECUTE format(
'CREATE TABLE IF NOT EXISTS %I PARTITION OF purchase_orders_p FOR VALUES FROM (%L) TO (%L)',
part_name, d, next_d
);
END $$;