Tutte le seguenti risposte presuppongono che le righe vengano restituite in corrispondenza ordine.
Postgres 9.3
Con la caratteristica stravagante di esplodere le righe dalle funzioni SRF che restituiscono lo stesso numero di righe in parallelo:
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!
Le parentesi attorno al tipo di riga sono necessarie per disambiguare da un possibile riferimento a una tabella. I dettagli nel manuale qui.
L'impostazione predefinita è il prodotto cartesiano delle righe se il numero di righe restituite non è lo stesso (il che lo interromperebbe completamente per te).
Postgres 9.4
WITH ORDINALITY
per generare numeri di riga al volo
Puoi usare WITH ORDINALITY
per generare un numero di riga al volo e non è necessario dipendere dall'associazione del risultato delle funzioni SRF nel SELECT
elenco:
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;
Funziona per lo stesso numero di righe di ciascuna funzione e per numeri diversi (che verrebbero conteggiati come mancata corrispondenza).
Correlati:
ROWS FROM
per unire gli insiemi riga per riga
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;
Risposta correlata:
A parte:EXECUTE FORMAT
non è una funzionalità plpgsql impostata. RETURN QUERY
è. format()
è solo una comoda funzione per creare una stringa di query, può essere utilizzata ovunque in SQL o plpgsql.