This query lists all parents sharing the same children, where there are more than one parent:
SELECT array_agg(parent) AS parents, children, count(*) AS dupes
FROM (
SELECT parent, array_agg(child ORDER BY child) AS children
FROM tbl
GROUP BY 1
) sub
GROUP BY 2
HAVING count(*) > 1;
Simple, but not the fastest possible solution. For big tables, I would try something else.
The problem belongs to the "relational division" family. Here is a collection of query styles we assembled some time ago:
How to filter SQL results in a has-many-through relation
One way (of many) to get single parent per row:
WITH cte AS (
SELECT parent, array_agg(child ORDER BY child) AS children
FROM tbl
GROUP BY 1
)
SELECT *
FROM cte c
WHERE EXISTS (
SELECT 1
FROM cte c1
WHERE c1.children = c.children
AND c1.parent <> c.parent
);