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

PostgreSQL的PL/pgSQL中能否实现类C/C#风格复合赋值运算符?

PostgreSQL是否支持自定义+=这类复合赋值运算符?

结论:不支持,无法通过CREATE OPERATOR实现C、C#风格的复合赋值语法。

核心原因

  • CREATE OPERATOR仅能定义SQL层面的纯计算类二元/一元操作符,本质是将自定义符号映射为「接收输入值、返回计算结果」的函数,不支持产生修改左操作数、给变量赋值这类副作用。
  • 赋值是PL/pgSQL语法解析层的特殊逻辑,仅识别:=(兼容写法=)作为赋值标记,不属于用户可自定义扩展的语法范畴。就算尝试定义包含=的自定义操作符,解析器也不会将其识别为赋值动作,会直接抛出语法错误。
  • 就算重载+操作符实现文本拼接能力,v_my_text + '追加文本'也只会返回拼接后的新值,不会自动把结果写回原变量,本质和内置的||拼接符没有区别,仍然需要手动写赋值语句,达不到+=省略左值重复书写的效果。

现有替代写法

目前PL/pgSQL中实现字符串追加的标准原生写法就是你列出的等价形式,没有更短的内置语法:

v_my_text := v_my_text || 'some more text to be added to existing value of v_my_text';

如果是高频拼接场景,可以封装通用拼接函数减少重复逻辑,但仍然无法省略显式赋值步骤:

-- 自定义字符串追加函数示例
CREATE OR REPLACE FUNCTION str_append(original text, append_content text)
RETURNS text AS $$
BEGIN
  RETURN original || append_content;
END;
$$ LANGUAGE plpgsql IMMUTABLE;

-- 调用方式
v_my_text := str_append(v_my_text, 'some more text to be added to existing value of v_my_text');

注:截至PostgreSQL 16正式版,官方既没有内置+=这类复合赋值语法,也没有开放自定义赋值类运算符的扩展入口,不需要在CREATE OPERATOR方向尝试实现该需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 01:30:36