38 lines
1.1 KiB
SQL
38 lines
1.1 KiB
SQL
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 $$;
|