PostgreSQL не может в одном запросе сочетать процедурный (использование пользовательских переменных) и декларативный стиль программирования. Для получения специфичной выборки вам нужно написать отдельную хранимую функцию:
CREATE OR REPLACE FUNCTION public.get_id1_id2() RETURNS SETOF test_table AS
$BODY$
DECLARE
last integer := 0; -- аналог "SELECT @last:=0"
r test_table%rowtype; -- курсор для выборки и анализа строки
BEGIN
FOR r IN SELECT * FROM test_table -- проход по всей исходной выборки
LOOP
IF r."ID_1" > last THEN -- аналог "WHERE `ID_1` > @last;"
last = r."ID_2"; -- аналог "@last := `ID_2`"
RETURN NEXT r; -- включение текущей строки в выходную выборку
END IF;
END LOOP;
RETURN;
END;$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
Либо реализовать постобработку полной выборки уже в приложении, например, реализация на PHP:
function get_id1_id2($rows)
{
$out = []; // выходная выборка
$last = 0; // аналог "SELECT @last:=0"
foreach($rows as $row) // проход по всей исходной выборки
if($row["ID_1"] > $last) // аналог "WHERE `ID_1` > @last;"
{
$last = $row["ID_2"]; // аналог "@last := `ID_2`"
$out[] = $row; // включение текущей строки в выходную выборку
}
return $out;
}