-- Statistics cube: hour + daily facts (server × iface × country × service × ASN). -- Compact types. FILLFACTOR/autovacuum нельзя на partitioned parent (PG 42809) — -- задаются на листовых партициях в ensurePartitionFor. -- Retention: DROP partitions only (see PARTITION_SPECS). CREATE TABLE IF NOT EXISTS flow_hour_facts ( server_id BIGINT NOT NULL REFERENCES servers(id) ON DELETE CASCADE, bucket_at TIMESTAMPTZ NOT NULL, iface TEXT NOT NULL, country CHAR(2) NOT NULL, service TEXT NOT NULL, asn INTEGER NOT NULL, bytes BIGINT NOT NULL DEFAULT 0, packets BIGINT NOT NULL DEFAULT 0, PRIMARY KEY (server_id, bucket_at, iface, country, service, asn) ) PARTITION BY RANGE (bucket_at); CREATE TABLE IF NOT EXISTS flow_daily_facts ( server_id BIGINT NOT NULL REFERENCES servers(id) ON DELETE CASCADE, day DATE NOT NULL, iface TEXT NOT NULL, country CHAR(2) NOT NULL, service TEXT NOT NULL, asn INTEGER NOT NULL, bytes BIGINT NOT NULL DEFAULT 0, packets BIGINT NOT NULL DEFAULT 0, PRIMARY KEY (server_id, day, iface, country, service, asn) ) PARTITION BY RANGE (day);