You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
WITH
-- объединяем ограничения FK с атрибутами, которые в них задействованы
fk_with_attributes AS (
SELECTc.connameas fk_name,
c.conrelid,
c.confrelid,
fk_conkey.conkey_orderAS att_order,
fk_conkey.conkey_number,
fk_confkey.confkey_number,
rel_att.attnameAS rel_att_name,
rel_att.atttypidAS rel_att_type_id,
rel_att.atttypmodAS rel_att_type_mod,
rel_att.attnotnullAS rel_att_notnull,
frel_att.attnameAS frel_att_name,
frel_att.atttypidAS frel_att_type_id,
frel_att.atttypmodAS frel_att_type_mod,
frel_att.attnotnullAS frel_att_notnull
FROMpg_catalog.pg_constraintAS c
CROSS JOIN LATERAL UNNEST(c.conkey) WITH ORDINALITY AS fk_conkey(conkey_number, conkey_order)
LEFT JOIN LATERAL UNNEST(c.confkey) WITH ORDINALITY AS fk_confkey(confkey_number, confkey_order)
ONfk_conkey.conkey_order=fk_confkey.confkey_orderLEFT JOINpg_catalog.pg_attributeAS rel_att
ONrel_att.attrelid=c.conrelidANDrel_att.attnum=fk_conkey.conkey_numberLEFT JOINpg_catalog.pg_attributeAS frel_att
ONfrel_att.attrelid=c.confrelidANDfrel_att.attnum=fk_confkey.confkey_numberWHEREc.contypeIN ('f')
),
--
fk_with_attributes_grouped AS (
SELECT
fk_name,
conrelid,
confrelid,
array_agg (rel_att_name order by att_order) as rel_att_names,
array_agg (frel_att_name order by att_order) as frel_att_names
FROM fk_with_attributes
GROUP BY1, 2, 3
)
SELECTr_from.relname, -- ссылающееся отношениеc1.fk_name, -- наименование ограничения fkc2.fk_name-- наименование ограничения fk (пересечение по атрибутам)FROM fk_with_attributes_grouped AS c1
INNER JOIN fk_with_attributes_grouped AS c2 ONc1.fk_name<c2.fk_nameANDc1.conrelid=c2.conrelidANDc1.confrelid=c2.confrelidAND (c1.rel_att_names && c2.rel_att_names)
INNER JOINpg_catalog.pg_classAS r_from ONr_from.oid=c1.conrelid
See article https://habr.com/ru/articles/803841/
Part "FK возможно совпадают или устарели"
Similar to https://github.com/mfvanek/pg-index-health-sql/blob/master/sql/intersected_indexes.sql
The text was updated successfully, but these errors were encountered: