Todas as respostas a seguir pressupõem que as linhas são retornadas em correspondência ordem.
Postgres 9.3
Com o recurso peculiar de explodir linhas de funções SRF retornando o mesmo número de linhas em 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!
Os parênteses ao redor do tipo de linha são necessários para desambiguar de uma possível referência de tabela. Detalhes no manual aqui.
Esse padrão é o produto cartesiano de linhas se o número de linhas retornadas não for o mesmo (o que o quebraria completamente para você).
Postgres 9.4
COM ORDINALIDADE
para gerar números de linha em tempo real
Você pode usar
COM ORDINALIDADE
para gerar um número de linha em tempo real e não precisa depender do emparelhamento do resultado das funções SRF no 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;
Isso funciona para o mesmo número de linhas de cada função, bem como para números diferentes (que seriam contados como incompatibilidade).
Relacionado:
ROWS FROM
para unir conjuntos linha por linha
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;
Resposta relacionada:
Além:
EXECUTAR FORMATO
não é uma funcionalidade definida do plpgsql. RETORNAR CONSULTA
é. format()
é apenas uma função conveniente para construir uma string de consulta, pode ser usada em qualquer lugar em SQL ou plpgsql.