postgresql截断字符串

postgresql截断字符串,postgresql,identifier,maxlength,Postgresql,Identifier,Maxlength,我正在使用PostgreSQL上的表返回函数(使用pgAdmin 4)。它过去工作正常,但由于某些原因,我在尝试修改函数时收到以下错误消息: 错误:键入“表(id整数、id\u方案整数、日期\u有效 时间戳 “智慧”是不存在的 注意:标识符”表(id整数、id\u方案整数、日期\u有效 无时区时间戳、dni_q95双精度、csp_预测_q95 双精度,存储“q95双精度)”将被截断为 表(id整数、id\u方案整数、日期\u有效时间戳) 我知道标识符不能超过63字节,因此我的代码行被截断。如果有

我正在使用PostgreSQL上的表返回函数(使用pgAdmin 4)。它过去工作正常,但由于某些原因,我在尝试修改函数时收到以下错误消息:

错误:键入“表(id整数、id\u方案整数、日期\u有效 时间戳 “智慧”是不存在的 注意:标识符”表(id整数、id\u方案整数、日期\u有效 无时区时间戳、dni_q95双精度、csp_预测_q95 双精度,存储“q95双精度)”将被截断为 表(id整数、id\u方案整数、日期\u有效时间戳)

我知道标识符不能超过63字节,因此我的代码行被截断。如果有人能在以下两个问题上帮助我,我将不胜感激:

  • 为什么这一行突然被识别为标识符

  • 知道我需要返回所有这些列,如何避免这个问题

  • 以下是功能体:

    CREATE OR REPLACE FUNCTION public.csp_park_95(id_park integer)
    RETURNS SETOF "TABLE(id integer, id_scenario integer, date_valid 
    timestamp without time zone, dni_q95 double precision, csp_forecast_q95 
    double precision, storage_q95 double precision)"
    LANGUAGE 'sql'
    COST 100.0
    VOLATILE 
    ROWS 1000.0
    AS $function$
    
    -- irrelevant code
    
    $function$;
    
    ALTER FUNCTION public.csp_park_95(integer)
    OWNER TO "POC_kacare_admin";   
    

    尝试删除双引号,如下所示:

    CREATE OR REPLACE FUNCTION public.csp_park_95(id_park integer)
        RETURNS TABLE(id integer, id_scenario integer, date_valid 
        timestamp without time zone, dni_q95 double precision, csp_forecast_q95 
        double precision, storage_q95 double precision)
        LANGUAGE 'sql'
        COST 100.0
        VOLATILE 
        ROWS 1000.0
        AS $function$
        -- irrelevant code
        $function$;
    

    这不是pgAdmin中的错误。双引号用于标识。因此
    “表(id整数、id\u场景整数、日期\u无时区的有效时间戳、dni\u q95双精度、csp\u预测\u q95双精度、存储\u q95双精度)”
    是一个名称,而不是名称和参数列表。是的,我知道。但如果我正确理解问题
    “表(id整数、id\u场景整数、日期\u无时区的有效时间戳、dni\u q95双精度、csp\u预测\u q95双精度、存储\u q95双精度)”
    不是op想要的,他说:“2)知道我需要返回所有这些列后,如何避免这个问题?”。无论如何,我编辑了我的答案,以避免pgAdmin4的错误猜测。非常感谢,在删除双引号后它仍然有效:)抱歉,如果我的问题有点幼稚,我是postgresql新手。“为什么这一行突然被识别为标识符?”因为双引号用于标识符: