WITH cte AS ( SELECT *, ROW_NUMBER() OVER ( PARTITION BY Name, Age ORDER BY Name, Age ) row_num FROM TableName ) delete FROM cte WHERE row_num > 1;
DELETE FROM dups a USING ( SELECT MIN(ctid) as ctid, key FROM dups GROUP BY key HAVING COUNT(*) > 1 ) b WHERE a.key = b.key AND a.ctid <> b.ctid