以下のすべての回答は、行が一致で返されることを前提としています。 注文します。
Postgres 9.3
SRF関数から行を分解して同じを返すという風変わりな機能を備えています 並列行数:
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!
行タイプを囲む括弧は、可能なテーブル参照から明確にするために必要です。 マニュアルの詳細はこちら
返される行の数が同じでない場合、これはデフォルトでデカルト積の行になります(これにより完全に壊れます)。
Postgres 9.4
WITH ORDINALITY
その場で行番号を生成するには
WITH ORDINALITY
を使用できます その場で行番号を生成し、SELECT
のSRF関数の結果のペアリングに依存する必要はありません。 リスト:
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;
これは、各関数の同じ行数と異なる数(不一致としてカウントされます)に対して機能します。
関連:
ROWS FROM
セットを行ごとに結合する
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;
関連する回答:
余談:EXECUTE FORMAT
設定されたplpgsql機能ではありません。 RETURN QUERY
は。 format()
>
クエリ文字列を作成するための便利な関数であり、SQLまたはplpgsqlのどこでも使用できます。