You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PL/pgSQL中编写带数组列条件判断的upvote投票函数?

正确实现的upvote函数

你原有伪代码的核心逻辑可以直接调整为合法的PostgreSQL PL/pgSQL语法,核心修正点如下:

  • 重命名输入参数为p_cid、p_uid,避免和表中同名字段产生歧义,原写法where cid = cid会永远成立,导致误更新全表
  • 使用NOT p_uid = ANY(already_voted_uids)实现「uid未存在于已投票数组」的判断
  • 使用PostgreSQL内置的array_append()函数实现数组追加元素的操作
  • 将票数加1、数组追加uid的操作合并到同一条UPDATE语句中,保证操作原子性

完整可运行代码如下:

create function upvote (p_cid text, p_uid uuid) 
returns void as $$
begin
  update submissions
  set 
    number_of_votes = number_of_votes + 1,
    already_voted_uids = array_append(already_voted_uids, p_uid)
  where 
    cid = p_cid
    and NOT p_uid = ANY(already_voted_uids);
end;
$$ language plpgsql security definer;

注意:请提前为submissions表的already_voted_uids列设置默认值为'{}'::uuid[],避免字段为NULL时判断逻辑失效、元素追加失败。

内容的提问来源于stack exchange,提问作者KevinTale

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 10:09:03