関数を使用して posgresql の選択を固定しようとしているのは、不変または安定していると言って関数を持っているためです
CREATE OR REPLACE FUNCTION get_data(uid uuid)
RETURNS integer AS $$
BEGIN
RAISE NOTICE 'UUID %', $1;
-- DO SOME STUFF
RETURN 0;
END;
$$ LANGUAGE plpgsql IMMUTABLE STRICT;
次のように呼び出すと:
SELECT get_data('3642e529-b098-4db4-b7e7-6bb62f8dcbba'::uuid)
FROM table
WHERE true LIMIT 100;
100 件の結果があり、1 件の通知のみが発生しました
このように呼び出すと:
SELECT get_data(table.hash)
FROM table
WHERE 1 = 1 AND table.hash = '3642e529-b098-4db4-b7e7-6bb62f8dcbba' LIMIT 100;
100 件の結果と 100 件の通知があります
in パラメーターが同じであることを確認するために条件 (table.hash = '3642e529-b098-4db4-b7e7-6bb62f8dcbba') が追加されました
table.hash は uuid タイプです
質問は次のとおりです。 では、関数の結果をキャッシュする方法を PG に強制するにはどうすればよいでしょうか。(可能であれば)2番目のケースで通知(関数呼び出し)を1つだけ発生させたい...