如何将CSV中的参数列表传递给Postgres函数

时间:2017-12-02 03:13:53

标签: postgresql csv plpgsql rds

我写了一个Postgres函数,它涉及在表格中插入记录。它需要一些参数作为输入。

CREATE OR REPLACE FUNCTION public.add_person(
    name character varying,
    email character varying,
    level integer,
    company_id integer,
    comp_list integer[])

我有一个CSV,其列与该函数的输入参数匹配。如何将CSV作为输入列表提供并调用该函数?

修改 该数据库位于AWS的RDS实例中。所以我没有superuser权限将文件复制到临时表。 file_fdw也不是一个选项,因为Amazon RDS不支持此扩展程序。

1 个答案:

答案 0 :(得分:0)

根据COPY syntax,您需要一个表格来从CSV文件导入数据。使用临时表来缓冲文件中的数据,例如:

do $$
begin
    create temp table temp (
        name character varying, 
        email character varying, 
        level integer, 
        company_id integer, 
        comp_list integer[]);
    copy temp from 'c:\data\test.csv' (format csv, header);
    perform add_person(name, email, level, company_id, comp_list)
    from temp;
    drop table temp;
end
$$;

或者,您可以使用扩展程序file_fdw,示例:

create extension if not exists file_fdw;

create server csv_server foreign data wrapper file_fdw;

create foreign table csv_file (
    name character varying, 
    email character varying, 
    level integer, 
    company_id integer, 
    comp_list integer[]
) server csv_server
options (filename 'c:\data\test.csv', format 'csv', header 'on');

select add_person(name, email, level, company_id, comp_list)
from csv_file;