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

How to pass list of arguments in CSV to a Postgres function

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

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 将文件复制到临时 table 的权限。 file_fdw 也不是一个选项,因为 Amazon RDS 不支持此扩展。

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

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;