首页 > 解决方案 > 如何使用 SQL 复制 csv 文件

问题描述

我需要在我的数据库中导入一个 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。CONTEXT:SQL 语句“COPY match_import FROM 'filename'DELIMITER',' CSV HEADER”PL/pgSQL 函数 import_match_csv(字符变化,字符变化)SQL 语句的第 33 行

标签: sqlpostgresqlcsvimportcopy

解决方案


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

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

推荐阅读