【问题标题】:How to copy a csv file using SQL如何使用 SQL 复制 csv 文件
【发布时间】:2020-01-06 12:12:01
【问题描述】:

我需要在我的数据库中导入一个 csv。 我在 sql 中创建了一个执行导入的函数:

 CREATE OR REPLACE FUNCTION import_match_csv(filename varchar(500), username varchar(500)) RETURNS VOID AS $$
   BEGIN
    CREATE TABLE match_import (....));

    COPY match_import FROM 'filename' DELIMITER ',' CSV HEADER;

    INSERT ....

    DROP TABLE match_import;
   END;
$$ LANGUAGE plpgsql;

调用写在psql提示符下的函数

 SELECT * FROM import_match_csv('/Users/benny/Desktop/match.csv', 'benny');

我得到错误:

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

【问题讨论】:

  • 在 COPY 语句中删除文件名周围的单引号,它现在只是一个字符串文字。
  • @OTTA 如果我去掉单引号,我会在文件名处得到一个 sintax 错误

标签: sql postgresql csv import copy


【解决方案1】:

您必须使用动态 SQL,因为 COPY 不支持参数:

EXECUTE format(
           'COPY match_import FROM %L (FORMAT ''csv'', DELIMITER '','', HEADER)',
           filename
        );

【讨论】:

    猜你喜欢
    • 2015-10-10
    • 2012-05-24
    • 2015-08-05
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    • 2015-07-14
    • 2018-04-30
    相关资源
    最近更新 更多