Rit*_*ari 7 postgresql triggers hasura
我想使用触发器函数限制单个用户 ( ) 向PostgreSQL表的插入。每个人最多应该能够创建5秒。我还尝试访问Hasura session_variables,其中包含用于识别.departmentbusinessbusiness department x-hasura-business-idbusiness
控制台显示有关不存在的 postgres 函数的错误,我认为我没有使用该函数。to
我尝试创建的 SQL 函数的代码是
--- Create function to check business's department count
CREATE FUNCTION check_dpt_quota()
RETURNS trigger AS $$
DECLARE department_count INTEGER;
DECLARE session_variables JSON;
BEGIN
session_variables := current_setting('hasura.user', 't');
SELECT count(*) INTO department_count FROM "public"."department"
WHERE business_id = (session_variables ->> 'x-hasura-business-id')::uuid;
IF department_count > 4 THEN
RAISE EXCEPTION 'Error: Department Quota Exceeded';
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
--- Create trigger to run function before INSERT
CREATE TRIGGER insert_department BEFORE INSERT ON "public"."department" FOR EACH ROW EXECUTE PROCEDURE check_dpt_quota();
Run Code Online (Sandbox Code Playgroud)
我在通过Hasura 控制台创建 SQL 函数时遇到的错误是
[
{
"definition": {
"schema": "public",
"name": "to"
},
"reason": "in function \"to\": no such function exists in postgres : \"to\"",
"type": "function"
}
]
Run Code Online (Sandbox Code Playgroud)
我不知道我做错了什么,并且错误消息的描述性不足以让我理解。有人可以帮我处理这段代码吗?
终于想通了!
我犯了两个错误。
Track this我在运行SQL 查询时检查了该选项
触发函数不被跟踪
在将值分配给之前我没有将值转换为jsoncurrent_setting('hasura.user', 't')类型session_variables
代码的更正版本将是(只是修改的部分)
...
BEGIN
session_variables := current_setting('hasura.user', 't')::JSON;
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
923 次 |
| 最近记录: |