PostgreSQL中插入包含$$的字符串时遇到问题求助
问题排查与解决:PL/pgSQL中插入含$$的字符串导致语法异常
你的代码出现异常的核心原因是DO块使用的分隔符$$与bio字段值中的$$冲突——PostgreSQL会把字符串里的$$误认为是DO块的结束标记,从而触发语法错误。
解决方法:更换DO块的分隔符
选择一个不会出现在字符串内容中的自定义分隔符(比如$user_sync_block$),替换原有的$$即可避免冲突。修改后的代码如下:
DO $user_sync_block$ DECLARE newId bigint; BEGIN INSERT INTO users("email","bio","status","created_by","updated_by") VALUES ('tetsinsert@gmail.com','❄❄Haocute$$','accepted','1','1') RETURNING id INTO newId; UPDATE synces SET "version" = "version" + 1, updated_at = now(), new_id = newId WHERE "old_id" = 98525 and table_name = 'users'; IF NOT FOUND THEN INSERT INTO synces (created_at, updated_at, deleted_at, table_name, old_id, new_id, "version") VALUES(now(), now(), null, 'users', 98525, newId, 0); END IF; END $user_sync_block$
补充说明
- 自定义分隔符可以是任意由
$包裹的字符串,只要不与代码中的字符串内容重复即可; - 若后续字符串中可能出现其他特殊分隔符,也可以选择对字符串中的
$进行转义,但更换分隔符是更简洁可靠的方案; - 确认
users和synces表的字段名确实需要双引号(仅当字段名包含大小写混合、特殊字符或保留字时才需要),如果是小写常规字段,可去掉双引号简化代码。
内容的提问来源于stack exchange,提问作者Tuấn Trương Quốc
相关产品推荐
相关产品推荐

