From: | Nico Williams <nico(at)cryptonector(dot)com> |
---|---|
To: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | Joel Jacobson <joel(at)trustly(dot)com>, Pg Hackers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: Idea on how to simplify comparing two sets |
Date: | 2017-02-23 21:27:43 |
Message-ID: | 20170223212743.GD30233@localhost |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Tue, Feb 07, 2017 at 10:58:41AM -0500, Tom Lane wrote:
> Joel Jacobson <joel(at)trustly(dot)com> writes:
> > Currently there is no simple way to check if two sets are equal.
>
> Uh ... maybe check whether SELECT set1 EXCEPT SELECT set2
> and SELECT set2 EXCEPT SELECT set1 are both empty?
Even better, NATURAL(*) FULL OUTER JOIN the two table sources and check
that the result is empty. If the two sources have useful indices (or if
PG constructs suitable automatic indices for them) for this then the
query should be O(N).
(*) However, if you do this then there'd better not be any NULLs in
columns, otherwise you'll get false positives for differences. Of
course, if the two table sources have common primary key prefixes and
you only care about equality in those columns, then just FULL OUTER JOIN
USING (<primary key prefix>).
Nico
--
From | Date | Subject | |
---|---|---|---|
Next Message | Corey Huinker | 2017-02-23 21:33:05 | Re: Idea on how to simplify comparing two sets |
Previous Message | Jim Nasby | 2017-02-23 21:20:44 | Re: PinBuffer() no longer makes use of strategy |