Просто надеюсь подтвердить мои наблюдения и получить объяснение того, почему это происходит.
У меня есть функция, определенная как:
CREATE OR REPLACE FUNCTION "public"."__post_users_id_coin" ("coins" integer, "userid" integer) RETURNS TABLE (id integer) AS '
UPDATE
users
SET
coin = coin + coins
WHERE
userid = users.id
RETURNING
users.id' LANGUAGE "sql" COST 100 ROWS 1000
VOLATILE
RETURNS NULL ON NULL INPUT
SECURITY INVOKER
Когда я вызываю эту функцию из CTE, она выполняет команду SQL, но не вызывает функцию, например:
WITH test AS
(SELECT * FROM __post_users_id_coin(10, 1))
SELECT
1 -- Select 1 but update not performed
С другой стороны, если я вызываю функцию из CTE и затем выбираю результат CTE (или вызываю функцию напрямую без CTE), он выполняет команду SQL и вызывает функцию, например:
WITH test AS
(SELECT * FROM __post_users_id_coin(10, 1))
SELECT
*
FROM
test -- Select result and update performed
или
SELECT * FROM __post_users_id_coin(10,1)
Поскольку меня не волнует результат функции (просто нужно выполнить обновление), есть ли способ заставить это работать без выбора результата CTE?