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

创建含表列类型的PostgreSQL复合类型时遇语法错误求助

问题原因与解决方法

PostgreSQL在CREATE TYPE语句中不支持使用%TYPE引用表列的类型,这个语法仅适用于PL/pgSQL的变量声明,而非DDL层面的复合类型定义,这就是你遇到语法错误的原因。

解决方法

方法1:直接使用列的实际数据类型

先查询目标列的具体类型:

SELECT data_type 
FROM information_schema.columns 
WHERE table_schema = 'gp_core' 
  AND table_name = 'transaction_' 
  AND column_name = 'CODE_TRANSACTION';

将查询得到的类型替换到CREATE TYPE语句中,例如如果结果是character varying(32),则写:

CREATE TYPE gp_core.rec_key_transaction AS (
    CODE_TRANSACTION character varying(32)
);

方法2:用PL/pgSQL动态创建

通过匿名块动态获取列类型并创建复合类型,适合需要自动适配列类型的场景:

DO $$
DECLARE
    col_type regtype;
BEGIN
    -- 获取列的类型
    SELECT pg_typeof(t.CODE_TRANSACTION) INTO col_type 
    FROM gp_core.transaction_ t LIMIT 1;
    -- 动态执行创建类型的语句
    EXECUTE format('CREATE TYPE gp_core.rec_key_transaction AS (CODE_TRANSACTION %s);', col_type);
END $$;

注意:如果后续transaction_.CODE_TRANSACTION的类型发生变更,复合类型不会自动同步,需要手动更新或重新创建。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:12:48