错误:字符252处不存在类型“json_param”

时间:2018-04-12 13:39:43

标签: postgresql docker intellij-idea docker-compose

美好的一天同事。

我有一个非常奇怪的问题。我使用docker-compose,我的文件的一部分看起来像:

    version: "2.1"
services:   
  db:
    image: dr.mediascope.net/mediascope/wf/db:latest
    container_name: workflow_db_test
    ports:
      - "15432:5432"
    environment:
      - POSTGRES_USER=dev
      - POSTGRES_PASSWORD=dev
      - POSTGRES_DB=wf-db
    networks:
       wf_newfusion:
        aliases:
             - wf-db
    volumes:
      - /root/opt/databus_newfusion/workflow_newfusion/create-schema-docker.sql:/docker-entrypoint-initdb.d/4-schema.sql

启动码头工具后,我抓住下一个错误:

ERROR:  type "json_param" does not exist at character 252

我的SQL的一部分,它可以在Idea中正常工作:

-- separated schema which is dedicated for API
DROP SCHEMA IF EXISTS api CASCADE;
CREATE SCHEMA api;
ALTER SCHEMA api
OWNER TO wfweb_docker;

DROP TYPE IF EXISTS json_param;
CREATE TYPE json_param AS (id TEXT, label TEXT);

ALTER TYPE json_param
OWNER TO wfweb_docker;

.......

SET search_path = core, pg_catalog;
CREATE OR REPLACE VIEW api.v_scheme_param_set AS
  WITH cte AS (
      SELECT
        param_set_detail.param_set_id,
        json_agg(row_to_json(
                       ROW (param_set_detail.param_name :: TEXT, param_set_detail.param_val :: TEXT) :: json_param)) AS set_values
      FROM core.param_set_detail
      GROUP BY param_set_detail.param_set_id
  )
  SELECT
    s.scheme_id,
    cte.param_set_id,
    cte.set_values
  FROM core.param_set s
    JOIN cte ON s.param_set_id = cte.param_set_id
  ORDER BY cte.param_set_id DESC;

如果我使用Idea Ultimate并执行它,一切正常!没有错误的消息和其他!如果我在“psql”中使用它或者当docker启动它时会出现错误。在此脚本之前运行了另外三个,但一切正常。

1 个答案:

答案 0 :(得分:1)

据推测,您在json_param架构中创建了api类型。在这种情况下,您需要在使用该类型时在查询中指定架构名称,因为您明确地在搜索路径中 not 包含该架构。

此外,您无需在搜索路径中加入pg_catalog,因为它是always searched