Delivery 1.0 Help

Partycjonowanie - SQL

Lista praktycznych SQL do zarządzania partycjami przy założeniu, że partycje są twórzone po kolumnie typu timestamp na okres 1 miesiąca.

TWORZENIE PARTYCJI

WITH s AS ( SELECT i AS start, i + '1 month'::interval AS stop, extract(YEAR FROM i)::text || '_' || lpad(extract(MONTH FROM i)::text, 2, '0') AS sufix FROM generate_series('2023-01-01 00:00:00'::timestamp, '2023-06-01 00:00:00'::timestamp, '1 month'::interval) i ), t AS ( SELECT 'transaction' AS table - tu wpisz listę rodziców UNION SELECT 'email' UNION SELECT 'transaction_withsettlement' UNION SELECT 'balancelog' UNION SELECT 'emailstatus' UNION SELECT 'fees' UNION SELECT 'notification' UNION SELECT 'notificationid' UNION SELECT 'params' UNION SELECT 'parserdata' UNION SELECT 'product' UNION SELECT 'itnparserdata' UNION SELECT 'transactionanalyticdata' ) SELECT 'CREATE TABLE partitions.' || t.p || '_' || sufix || E' PARTITION OF public.' || t.p || E' FOR VALUES FROM (\'' || START || E'\') TO (\'' || stop || E'\');' FROM s, t ORDER BY 1;

SPRAWDZANIE POTENCJALNIE BRAKUJĄCYCH INDEKSÓW

WITH t AS ( SELECT '2022_12' AS old_partition_period, -- tu partycja z wzorcowym indexopwaniem '2023_01' AS new_partition_period -- tu partycja, której indeksy chcesz sprawdzić ), p AS ( SELECT 'transaction' AS table - tu wpisz listę rodziców UNION SELECT 'email' UNION SELECT 'transaction_withsettlement' UNION SELECT 'balancelog' UNION SELECT 'emailstatus' UNION SELECT 'fees' UNION SELECT 'notification' UNION SELECT 'notificationid' UNION SELECT 'params' UNION SELECT 'parserdata' UNION SELECT 'product' UNION SELECT 'itnparserdata' UNION SELECT 'transactionanalyticdata' ) SELECT replace( replace( pg_get_indexdef(indexrelid), old_partition_period, new_partition_period), 'INDEX', 'INDEX CONCURRENTLY') || ';' FROM pg_stat_user_indexes, t, p WHERE relname = p.table || '_' || old_partition_period AND replace(indexrelname, old_partition_period, new_partition_period) NOT IN ( SELECT indexrelname FROM pg_stat_user_indexes WHERE relname = p.table || '_' || new_partition_period);

USUWANIE PARTYCJI

WITH s AS ( SELECT CASE WHEN m < 10 THEN y::text || '_0'::text || m::text ELSE y::text || '_' || m::text END AS s FROM generate_series(2020, 2020) y, generate_series(1, 12) m ) SELECT 'ALTER TABLE ' || inhparent::regclass || ' DETACH PARTITION ' || inhrelid::regclass || '; ' -- || 'ALTER TABLE ' || inhrelid::regclass || ' SET SCHEMA archive;' FROM pg_inherits, s WHERE inhparent IN ( SELECT oid FROM pg_class WHERE relkind = 'p') AND inhrelid::regclass::text LIKE '%' || s || '%' ORDER BY 1;
Last modified: 30 May 2024