У меня есть эта простая тестовая функция в Postgres (в моей test
схеме).
CREATE OR REPLACE FUNCTION test.func_001
(
par_id int
)
RETURNS TABLE
(
id int
)
AS
$BODY$
DECLARE
var_id int;
BEGIN
update test.item --- this is a table
set
id = 4
WHERE
id = 44;
return query
select 1000 as id;
END;
$BODY$
LANGUAGE plpgsql;
В таблице test.item
есть один столбец идентификатора.
Я получаю ошибкуниже при попытке запустить функцию.
Query execution failed
Reason:
SQL Error [42702]: ERROR: column reference "id" is ambiguous
Detail: It could refer to either a PL/pgSQL variable or a table column.
Where: PL/pgSQL function test.func_001(integer) line 8 at SQL statement
Эта ошибка кажется странной, означает ли это, что Postgres обнаруживает конфликт / конфликт между столбцом test.item.id
и столбцом id
из возвращенной таблицы?!Как так?Это не имеет никакого смысла.
Я не могу в это поверить, но я не вижу здесь никаких других идентификаторов.
Заметьте, что если я закомментирую только эту часть.
-- WHERE
-- id = 44;
, тогда внезапно функция будет работать нормально.
Так что, похоже, Postgres путает идентификатор в предложении where с чем-то еще, называемым id?!
С чем?
Это совершенно нелогично и нелогично.
Может кто-нибудь объяснить, пожалуйста?