私の観察を確認し、なぜこれが起こっているのかについて説明を得たいと思っています。
私は次のように定義された関数を持っています:
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の結果を選択せずにこれを機能させる方法はありますか?