with constr as (select
o.conname as constraint_name,
(select nspname from pg_namespace where oid=c.relnamespace) as supertable_schema,
c.relname as supertable,
c.oid as supertable_oid,
o.conkey AS constraint_col,
pg_get_constraintdef(o.oid) AS constraint_def
from pg_constraint o inner join pg_class c on c.oid = o.conrelid
where o.contype='c'
and connoinherit='true'),
constr_unnest as (select constraint_name, supertable_schema, supertable, supertable_oid, constraint_col, constraint_col_num, ordin, constraint_def
from constr, unnest(constr.constraint_col) with ordinality as f(constraint_col_num, ordin)),
constr_with_names as (select constraint_name, supertable_schema, supertable, array_agg(a_target.attname order by ordin) as constraint_col, supertable_oid, constraint_def
from constr_unnest constr left join pg_attribute a_target on constr.constraint_col_num = a_target.attnum and constr.supertable_oid = a_target.attrelid and a_target.attisdropped = false
group by constraint_name, supertable_schema, supertable, supertable_oid, constraint_def)
select constraint_name, supertable_schema, supertable, constraint_def,
(select string_agg(pc.nspname || '.' || c.relname,';<br>' ORDER BY pc.nspname, c.relname) AS cols
from pg_inherits pi
inner join pg_class c on pi.inhrelid=c.oid
inner join pg_namespace pc on c.relnamespace=pc.oid
where pi.inhparent=constr_with_names.supertable_oid) as tables_without_the_constraint
from constr_with_names
order by supertable_schema, supertable, constraint_name;