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

PostgreSQL执行format动态DDL提示无法识别类型说明符I如何解决

报错原因
  • 核心原因是你当前使用的PostgreSQL版本低于9.1:%I是PostgreSQL 9.1版本才新增的标识符格式化占位符,用于自动转义SQL标识符(比如模式名、表名)避免注入风险,低版本无法识别这个格式说明符。
  • 次要排查点:确认你写的是大写字母I,不是小写字母l或者数字1,拼写错误也会触发该报错。
解决方法

方案1(推荐):升级PostgreSQL版本

将数据库版本升级到9.1及以上,原有函数代码无需修改即可正常运行。

方案2(兼容低版本):替换%I为quote_ident()手动转义

如果无法升级版本,可以用quote_ident()函数实现相同的标识符转义效果,修改后的函数代码如下:

CREATE OR REPLACE FUNCTION public.addschema(_schema_name character varying, _tp_table_name character varying )
 RETURNS character varying
 LANGUAGE plpgsql
AS $function$
begin 
    -- 用quote_ident转义模式名
    execute 'CREATE SCHEMA ' || quote_ident(_schema_name);
    -- 分别转义模式名和表名后拼接
    execute 'CREATE TABLE ' || quote_ident(_schema_name) || '.' || quote_ident(_tp_table_name) || 
        '( id uuid NOT NULL DEFAULT uuid_generate_v4(), raw_id uuid NULL)';
    RETURN _schema_name;
END;
$function$;

额外注意:函数中用到了uuid_generate_v4()函数,需要提前安装uuid-ossp扩展才能正常使用,执行以下语句开启扩展:

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 02:18:05