Просто сподіваюся підтвердити своє спостереження і отримати пояснення, чому це відбувається.
У мене функція визначена як:
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?