В соответствии с инструкциями здесь я создал две функции, которые используют EXECUTE FORMAT
и возвращают одну и ту же таблицу (int,smallint)
.
Примеры определений:
CREATE OR REPLACE FUNCTION function1(IN _tbl regclass, IN _tbl2 regclass,
IN field1 integer)
RETURNS TABLE(id integer, dist smallint)
CREATE OR REPLACE FUNCTION function2(IN _tbl regclass, IN _tbl2 regclass,
IN field1 integer)
RETURNS TABLE(id integer, dist smallint)
Обе функции возвращают одинаковое количество строк. Пример результата (всегда будет упорядочен по расстоянию):
(49,0)
(206022,3)
(206041,3)
(92233,4)
Есть ли способ сравнить значения второго поля между двумя функциями для одних и тех же строк, чтобы убедиться, что оба результата одинаковы:
Например:
SELECT
function1('tblp1','tblp2',49),function2('tblp1_v2','tblp2_v2',49)
Возвращает что-то вроде:
(49,0) (49,0)
(206022,3) (206022,3)
(206041,3) (206041,3)
(92233,4) (133,4)
Хотя я не ожидаю идентичных результатов (каждая функция является запросом topK, и у меня есть связи, которые прерываются произвольно / с некоторыми оптимизациями во второй функции для повышения производительности), я могу гарантировать, что обе функции возвращают правильные результаты. , если для каждой строки вторые числа в результатах совпадают. В приведенном выше примере я могу убедиться, что получаю правильные результаты, потому что:
1st row 0 = 0,
2nd row 3 = 3,
3rd row 3 = 3,
4th row 4 = 4
несмотря на то, что для 4-й строки 92233!=133
Есть ли способ получить только второе поле каждого результата функции, чтобы сравнить их, например. с чем-то вроде:
SELECT COUNT(*)
FROM
(SELECT
function1('tblp1','tblp2',49).field2,
function2('tblp1_v2','tblp2_v2',49).field2 ) n2
WHERE function1('tblp1','tblp2',49).field2 != function1('tblp1','tblp2',49).field2;
Я использую PostgreSQL 9.3.
select * from function1('tblp1','tblp2',49)
для набора возвращаемых функций. Не помещайте их в список выбора. - person a_horse_with_no_name   schedule 02.03.2015(will be always ordered by dist)
. Вы уверены, что это не открывает возможностей для ложных срабатываний? - person Erwin Brandstetter   schedule 02.03.2015