Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用SQL复制csv文件_Sql_Postgresql_Csv_Import_Copy - Fatal编程技术网

如何使用SQL复制csv文件

如何使用SQL复制csv文件,sql,postgresql,csv,import,copy,Sql,Postgresql,Csv,Import,Copy,我需要在我的数据库中导入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 ',' CS

我需要在我的数据库中导入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');
我得到一个错误:

错误:错误:无法打开文件名进行读取:没有这样的文件或目录 提示:复制自指示PostgreSQL server进程读取文件。您可能需要一个客户端工具,如psql的\copy。 上下文:SQL语句复制匹配\u从“文件名”分隔符、“CSV头”导入 PL/pgSQL函数导入\匹配\ CSV字符变化,SQL语句第33行字符变化


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

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

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