select
c1.table_schema,
c1.table_name,
string_agg(distinct c1.column_name, ', ' order by c1.column_name) as matching_columns
from information_schema.columns c1
where c1.table_schema = 'ourpension'
and (
lower(c1.column_name) like '%npo_agreement%'
or lower(c1.column_name) like '%representative%'
or lower(c1.column_name) like '%authorized%'
)
group by c1.table_schema, c1.table_name
having
bool_or(lower(c1.column_name) like '%npo_agreement%')
and
(
bool_or(lower(c1.column_name) like '%representative%')
or bool_or(lower(c1.column_name) like '%authorized%')
)
order by c1.table_name;