最初の解決策
SET
の構文 は:
SET [ SESSION | LOCAL ] configuration_parameter { TO | = } { value |'value' | DEFAULT }
ここで、 value
指定されたconfiguration_parameter
の新しい値です 。
_user_id
に保存されている値を割り当てるため 変数の場合、動的コマンドを生成してから EXECUTE
これがその方法です:
CREATE OR REPLACE FUNCTION set_user(_user_id bigint, is_local boolean default true)
RETURNS void
LANGUAGE PLPGSQL
AS $$
BEGIN
EXECUTE 'SET my.user_id TO ' || quote_nullable(_user_id);
END;
$$;
SQLフィドル を添付する テスト目的のリンク。
注:
-
quote_nullable()
関数はNULL
を返します 入力引数がnullの場合。あなたの場合は必要ないかもしれません。
2番目の解決策
<でも同じことができます。 code> set_config() @a_horse_with_no_nameに記載されているように機能します。その場合、関数は次のようになります。
CREATE OR REPLACE FUNCTION set_user(_user_id bigint, is_local boolean default true)
RETURNS void
LANGUAGE PLPGSQL
AS $$
BEGIN
PERFORM set_config('my.user_id', _user_id::TEXT, false);
END;
$$;
SQLフィドル を添付する テスト目的のリンク。
注:
- 2番目の引数をvarchar型に明示的にキャストする必要があります
-
PERFORM
式を評価し、必要がないため結果を破棄するために使用されます -
quote_nullable()
を使用できます ここでも機能します