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;
を私は 'add_persons_from_csv' callled関数を作成するためにあなたの最初の方法を踏襲しました唯一の引数としてファイルのパスを指定します。そして、私は 'copy'コマンドで' $ 1 'を使用しました: '$ 1(format csv、header);をコピーします;' '$ 1'の前後に構文エラーがあります。私は何を間違えたのですか? – ddd
このパラメータは 'COPY'で直接使用することはできません。このためには 'execute'([動的コマンド](https://www.postgresql.org/docs/current/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN))を使用してください。 – klin
私は元の関数 'name(name、email、level、company_id、comp_list)の値($ 1、$ 2、$ 3、$ 4、$ 5)に挿入します。そして、それは '実行'なしで正常に動作します – ddd