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

如何在PL/pgSQL的DO $$块中使用含$$的字符串值

解决DO块中密码哈希含特殊$标记导致的PL/pgSQL语法错误

你遇到的错误是:错误:在"9"附近或存在语法错误,根源是PostgreSQL的美元符引用机制,把密码哈希里的$p5k2$识别成了新的字符串开始标记,和DO块外层的$$分隔符产生解析冲突。

以下是两种可行的解决方法:

1. 自定义DO块的分隔符

选一个不会出现在密码哈希或SQL内容里的字符串作为分隔符(比如MY_CUSTOM_BLOCK),用$MY_CUSTOM_BLOCK$包裹整个DO块,避免内部特殊$结构被误解析:

DO $MY_CUSTOM_BLOCK$ DECLARE parent_user int; BEGIN 
CREATE TEMP TABLE IF NOT EXISTS tmp_f6a8e872_b346_4184_889d_52ffeded463f (id int); 
INSERT INTO form_user(firstname,lastname,displayname,job_title,username,authentication_type,password,password2,password_reset,role,comm_portal,issue_ticket,email,rec_sms,created_by,created_on,auto_name) 
VALUES ('delete','delete','delete','admin','delete','password','$p5k2$$9kenbgnr$XuoSekYV4qQlDE0NkNEs2UGJEEIWtjG/','$p5k2$$7cxgxz4n$JSkgV8oGg72S1O6i2xYZSLEU2Yd6bdCO','0','admin','No','No','delete@delete.com','No',22,'11/5/2023 19:59:45','delete delete (admin)') 
RETURNING id INTO parent_user; 
INSERT INTO tmp_f6a8e872_b346_4184_889d_52ffeded463f (id) VALUES (parent_user); 
END; $MY_CUSTOM_BLOCK$;

2. 使用参数化查询(推荐)

通过EXECUTE ... USING语法分离SQL模板和参数,完全规避字符串拼接带来的特殊字符问题,同时还能防止SQL注入:

DO $$ DECLARE parent_user int; BEGIN 
CREATE TEMP TABLE IF NOT EXISTS tmp_f6a8e872_b346_4184_889d_52ffeded463f (id int); 
EXECUTE '
    INSERT INTO form_user(
        firstname,lastname,displayname,job_title,username,
        authentication_type,password,password2,password_reset,role,
        comm_portal,issue_ticket,email,rec_sms,created_by,
        created_on,auto_name
    ) VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17)
    RETURNING id'
INTO parent_user
USING 
    'delete','delete','delete','admin','delete','password',
    '$p5k2$$9kenbgnr$XuoSekYV4qQlDE0NkNEs2UGJEEIWtjG/',
    '$p5k2$$7cxgxz4n$JSkgV8oGg72S1O6i2xYZSLEU2Yd6bdCO',
    '0','admin','No','No','delete@delete.com','No',22,
    '11/5/2023 19:59:45','delete delete (admin)';
INSERT INTO tmp_f6a8e872_b346_4184_889d_52ffeded463f (id) VALUES (parent_user); 
END; $$;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 00:16:03