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

PostgreSQL中使用EXECUTE format如何避免额外双引号添加?

解决PostgreSQL中EXECUTE format导致额外双引号的问题

问题根源在于你误用了%I占位符:%I是专门用来格式化SQL标识符(如表名、列名)的,它会自动给字符串添加双引号以确保标识符的合法性,同时转义字符串内部的双引号(将"替换为""),这就导致你的普通字符串值被当作标识符处理,产生了额外的双引号。

解决方法有两种:

1. 使用%L代替%I格式化字符串值

%L是format函数中用于处理字符串值的占位符,它会自动对字符串进行转义并添加单引号,适合作为数据值插入:

CREATE OR REPLACE FUNCTION test(arg text) RETURNS void AS $$
BEGIN
  EXECUTE format('INSERT INTO your_table (target_column) VALUES (%L)', arg);
END;
$$ LANGUAGE plpgsql;

2. 使用USING子句传递参数(推荐)

这种方式更安全,能避免SQL注入,同时PostgreSQL会自动处理值的转义,不需要手动使用格式化占位符:

CREATE OR REPLACE FUNCTION test(arg text) RETURNS void AS $$
BEGIN
  EXECUTE 'INSERT INTO your_table (target_column) VALUES ($1)' USING arg;
END;
$$ LANGUAGE plpgsql;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 02:34:58