Všechny následující odpovědi předpokládají, že řádky jsou vráceny v odpovídajících objednávka.
Postgres 9.3
Díky svérázné funkci rozkládání řádků z funkcí SRF vracejících stejné počet paralelních řádků:
SELECT count(*) AS mismatches
FROM (
SELECT function1('tblp1','tblp2',49) AS f1
, function2('tblp1_v2','tblp2_v2',49) AS f2
) sub
WHERE (f1).dist <> (f2).dist; -- note the parentheses!
Závorky kolem typu řádku jsou nutné k odlišení od možného odkazu na tabulku. Podrobnosti v příručce zde.
Pokud počet vrácených řádků není stejný, použije se jako výchozí kartézský součin řádků (což by to pro vás úplně porušilo).
Postgres 9.4
WITH ORDINALITY
generovat čísla řádků za běhu
Můžete použít WITH ORDINALITY
k vygenerování čísla řádku za běhu a nemusíte se spoléhat na párování výsledku funkcí SRF v SELECT
seznam:
SELECT count(*) AS mismatches
FROM function1('tblp1','tblp2',49) WITH ORDINALITY AS f1(id,dist,rn)
FULL JOIN function2('tblp1_v2','tblp2_v2',49) WITH ORDINALITY AS f2(id,dist,rn) USING (rn)
WHERE f1.dist IS DISTINCT FROM f2.dist;
Funguje to pro stejný počet řádků z každé funkce i pro různá čísla (což by se počítalo jako neshoda).
Související:
ROWS FROM
ke spojení sad řádek po řádku
SELECT count(*) AS mismatches
FROM ROWS FROM (function1('tblp1','tblp2',49)
, function2('tblp1_v2','tblp2_v2',49)) t(id1, dist1, id2, dist2)
WHERE t.dist1 IS DISTINCT FROM t.dist2;
Související odpověď:
Stranou:EXECUTE FORMAT
není nastavena funkce plpgsql. RETURN QUERY
je. format()
je pouze pohodlná funkce pro vytváření řetězce dotazu, lze ji použít kdekoli v SQL nebo plpgsql.