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

Docker-Compose启动PostgreSQL容器报错:type "json_param"不存在

解决Postgres容器启动时"json_param"类型不存在的问题

看起来你遇到的是初始化SQL脚本引用了未创建的自定义类型的问题,我来帮你梳理几个排查和解决的方向:

  • 检查初始化脚本的执行顺序
    Postgres会按/docker-entrypoint-initdb.d/目录下脚本的文件名排序执行,你的脚本命名是4-schema.sql。你需要确认:有没有更早执行的脚本(比如1-create-types.sql这类)负责创建json_param类型?如果没有,那要么把类型创建语句移到你的4-schema.sql的最前面,要么单独新建一个优先级更高的脚本(比如01-create-custom-types.sql)来创建这个类型,确保它在引用它的schema脚本之前执行。

  • 排查你的SQL脚本内容
    打开create-schema-docker.sql,定位到报错的第252行附近,找到使用json_param的语句。检查这个脚本里是否包含了CREATE TYPE json_param AS ...;的语句,而且这个语句要出现在所有引用它的表、函数或者其他对象之前。比如如果是创建表时用了这个类型:

    -- 先创建类型
    CREATE TYPE json_param AS json; -- 或者根据实际需求定义成复合类型等
    -- 再创建表
    CREATE TABLE some_table (
      id SERIAL PRIMARY KEY,
      params json_param
    );
    

    如果脚本里漏掉了创建类型的语句,那就补上。

  • 检查自定义镜像的预设初始化逻辑
    你使用的是dr.mediascope.net/mediascope/wf/db:latest这个自定义镜像,这个镜像可能自带了一些初始化脚本。你可以先启动容器(即使报错,容器可能还能短暂运行,或者修改docker-compose.yml把db服务的command改成sleep infinity让容器保持运行),进入容器查看/docker-entrypoint-initdb.d/目录下的所有脚本,看看有没有创建json_param类型的语句。如果镜像里没有这个逻辑,那你就需要自己在初始化脚本里加上类型创建的步骤。

  • 手动验证问题
    启动容器后,进入Postgres命令行手动测试:

    docker exec -it workflow_db_test psql -U dev -d wf-db
    

    先执行创建json_param类型的语句(根据实际需求定义,比如如果是JSON的别名就用CREATE TYPE json_param AS json;),然后再执行你的create-schema-docker.sql里的内容,如果能成功执行,就说明确实是类型创建顺序或者缺失的问题。

内容的提问来源于stack exchange,提问作者Александр Шаповалов

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:06:25