找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

983

积分

0

好友

139

主题
发表于 前天 22:44 | 查看: 7| 回复: 0

在 PostgreSQL 中,两个连续的美元符号 $$ 是一种特殊的语法结构,通常被称为 Dollar-Quoted String Constants(美元引用的字符串常量)[1]。它主要用于提升代码的可读性和编写便利性,尤其在处理包含特殊字符的文本时。

1. 函数体的定界符

在 PostgreSQL 中定义函数(特别是使用 PL/pgSQL 语言时),常用 $$ 来包裹整个函数体的定义。这种方式允许函数体内自由地使用单引号 而无需进行转义,大大简化了复杂逻辑和字符串的编写。

例如,创建一个生成无横线大写 GUID 的函数:

CREATE OR REPLACE FUNCTION f_guid()
RETURNS character varying
LANGUAGE plpgsql
AS
$$
BEGIN
  RETURN UPPER(REPLACE(gen_random_uuid()::text, '-', ''));
END;
$$;

在此,第一个 $$ 标志着函数体定义的开始,最后一个 $$ 标志着其结束。这种写法在编写存储过程或复杂函数时尤为清晰。

2. 字符串常量的引用

$$ 可以直接用于定义普通的字符串常量。当字符串中包含大量单引号或反斜杠时,使用 $$ 可以避免繁琐的转义,使 SQL 语句更易于阅读和维护。

示例:

SELECT $$I‘m a string constant that contains a single quote and a backslash \$$;

这个字符串中的单引号 和反斜杠 \ 都无需转义。PostgreSQL 的这一语法特性在处理包含HTML、JSON或正则表达式片段的文本时非常实用。

3. 带标签的嵌套引用

为了解决嵌套场景下的定界问题,PostgreSQL 的美元符号引用语法支持使用自定义“标签”。你可以在两个美元符号之间加入一个特定的标签名,只要开始和结束的标签一致即可。

例如:

$function$
BEGIN
  RETURN ($1 ~ $q$[\\t\\r\\n\\v\\\\]$q$);
END;
$function$

这里,外层使用 $function$ 作为标签,内层嵌套的字符串常量使用了 $q$ 作为标签。这完美区分了不同层级的边界,常用于函数体内再包含复杂正则表达式的情况。

总结

综上所述,$$ 在 PostgreSQL 中扮演着两个核心角色:

  1. 作为函数体的定界符:是定义 PL/pgSQL 等过程语言函数的标准且推荐的方式。
  2. 作为字符串常量的引用符:特别适用于包含特殊字符的字符串,能有效减少转义,提升代码清晰度。

通过可选的标签功能,它还支持灵活的嵌套使用,进一步增强了其表达能力和适用范围。

参考资料
[1] PostgreSQL 官方文档: Dollar-Quoted String Constants — https://www.postgresql.org/docs/current/sql-syntax-lexical.html#SQL-SYNTAX-DOLLAR-QUOTING




上一篇:MySQL 8.0与PostgreSQL 15选型指南:JSON性能、高并发与云原生场景深度对比
下一篇:老男孩-python运维6期 从零基础到项目实战,掌握Django、Tornado与监控架构
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-17 17:29 , Processed in 0.144349 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表