Todas las siguientes respuestas asumen que las filas se devuelven en coincidencia orden.
Postgres 9.3
Con la característica peculiar de explotar filas de funciones SRF que devuelven el mismo número de filas en paralelo:
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!
Los paréntesis alrededor del tipo de fila son necesarios para eliminar la ambigüedad de una posible referencia de tabla. Detalles en el manual aquí.
El valor predeterminado es el producto cartesiano de filas si el número de filas devueltas no es el mismo (lo que lo rompería por completo).
Postgres 9.4
WITH ORDINALITY
para generar números de fila sobre la marcha
Puedes usar WITH ORDINALITY
para generar un número de fila sobre la marcha y no es necesario depender de emparejar el resultado de las funciones SRF en SELECT
lista:
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;
Esto funciona para el mismo número de filas de cada función, así como para números diferentes (que se contarían como discrepancias).
Relacionado:
ROWS FROM
para unir conjuntos fila por fila
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;
Respuesta relacionada:
Aparte:EXECUTE FORMAT
no es una funcionalidad plpgsql establecida. RETURN QUERY
es. format()
es solo una función conveniente para construir una cadena de consulta, se puede usar en cualquier lugar en SQL o plpgsql.