如何将 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;
我编写了一个 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;