【问题标题】:Postgres Function - shows a copy command errorPostgres 函数 - 显示复制命令错误
【发布时间】:2023-03-11 06:49:01
【问题描述】:

我的函数定义是这样的,它抛出一个错误

CREATE OR REPLACE FUNCTION traffic.addcsv (
      filename text
    )
    RETURNS void AS
    $body$
    BEGIN
    DROP TABLE IF EXISTS traffic.tsdata;

    create table if not EXISTS traffic.tsdata
    (
        ldir text,
        dtime timestamp,
        epoch integer,
        ln_m integer,
        freeflow real,
        spdlimit integer,
        cnt integer,
        mean_spd real,
        stddev real,
        mn integer,
        mx integer,
        conf integer
    );

    COPY traffic.tsdata FROM '$1' DELIMITER ',' CSV HEADER;

    CREATE TABLE IF NOT EXISTS traffic.psdata
    (
         l_id BIGINT,
         direction char(1),
         dtime timestamp,
         day_number SMALLINT,
         epoch smallint,
         length_m integer,
         freeflow smallint,
         spdlimit smallint,
         cnt integer,
         mean_speed smallint,
         stddev double precision ,
         mn smallint,
         mx SMALLINT,
         confidence smallint
    ); 

    INSERT INTO traffic.psdata (
    l_id,
    direction,
    dtime,
    day_number,
    epoch,
    length_m,
    freeflow,
    spdlimit,
    cnt,
    mean_speed,
    stddev,
    mn,
    mx,
    confidence
    )
    SELECT
            (replace ( (replace(ldir,'F','')) ,'T',''  )::integer,
        RIGHT(tsdata.ldir,1)::char(1) ,
            dtime,
        EXTRACT(ISODOW FROM traffic.tsdata.dtime)::smallint ,
            epoch,
            ln_m,
            freeflow,
        spdlimit,
            cnt,
            mean_spd,
            stddev,
            mn,
            mx,
            conf)
    FROM traffic.tsdata;

    END;
    $body$
    LANGUAGE 'plpgsql'
    VOLATILE
    CALLED ON NULL INPUT
    SECURITY INVOKER
    PARALLEL UNSAFE
    COST 100;

错误:无法打开文件“$1”进行阅读:没有这样的文件或目录 提示:COPY FROM 指示 PostgreSQL 服务器进程读取文件。您可能需要一个客户端工具,例如 psql 的 \copy。 上下文:SQL 语句“COPY traffic.tsdata FROM '$1'DELIMITER','CSV HEADER” PL/pgSQL 函数 traffic.addcsv(text) 第 21 行 SQL 语句

【问题讨论】:

    标签: sql postgresql ems-sql-manager


    【解决方案1】:

    我认为 PL/pgSQL 不允许在 COPY 语句中使用变量。

    您可以使用动态 SQL 来做到这一点:

    EXECUTE format('COPY traffic.tsdata FROM %L DELIMITER '','' CSV HEADER', $1);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-12
      • 1970-01-01
      • 2014-04-07
      • 2017-04-29
      • 2014-09-15
      • 1970-01-01
      相关资源
      最近更新 更多