如何在DBeaver中向PostgreSQL表插入字面量'${value}'不替换变量
PostgreSQL插入原始字符串
${value}的解决方案 你遇到的问题是因为所用数据库客户端(如psql、ORM工具等)将${value}识别为未定义的变量,自动替换成了NULL。PostgreSQL本身不会解析单引号字符串中的${},问题出在客户端的预处理环节。以下是两种可靠的解决办法:
方法一:使用PostgreSQL美元引号字符串
这是最通用且稳妥的方式,美元引号能让PostgreSQL直接将内容作为原始字符串处理,完全避免客户端的变量插值干扰。
基础用法
用$$包裹需要保留的字符串:
INSERT INTO table (path, regex, replacement_path, uri) VALUES ('/api/foo/**', '/foo/(?<value>.*)', $$/foo/${value}$$, 'http://localhost:8080');
自定义标签(避免冲突)
如果你的字符串本身包含$$,可以自定义唯一标签(如$rep_str$):
INSERT INTO table (path, regex, replacement_path, uri) VALUES ('/api/foo/**', '/foo/(?<value>.*)', $rep_str$/foo/${value}$rep_str$, 'http://localhost:8080');
方法二:关闭客户端的变量插值功能
若坚持使用单引号,可临时关闭客户端的变量解析功能(以psql为例):
-- 关闭变量插值 \set variable_expansion off -- 执行插入语句 INSERT INTO table (path, regex, replacement_path, uri) VALUES ('/api/foo/**', '/foo/(?<value>.*)', '/foo/${value}', 'http://localhost:8080'); -- 恢复默认设置 \set variable_expansion on
注意:这种方式依赖具体客户端,通用性不如美元引号方案。
内容的提问来源于stack exchange,提问作者timmarch90
相关产品推荐
相关产品推荐

