私はcsvファイルからテーブルにデータをコピーするために(webportalの1つからコピーして修正した)関数をコピーしました。Postgres SQLエラー:ファイルをコピーするにはスーパーユーザーでなければなりません
create or replace function public.load_csv_file
(
target_table text,
csv_path text,
col_count integer
)
returns void as $$
declare
iter integer; -- dummy integer to iterate columns with
col text; -- variable to keep the column name at each iteration
col_first text; -- first column name, e.g., top left corner on a csv file or spreadsheet
begin
set schema 'public';
create table insert_from_csv();
-- add just enough number of columns
for iter in 1..col_count
loop
execute format('alter table insert_from_csv add column col_%s text;', iter);
end loop;
-- copy the data from csv file
execute format('copy insert_from_csv from %L with delimiter '','' quote ''"'' csv ', csv_path);
iter := 1;
col_first := (select col_1 from insert_from_csv limit 1);
-- update the column names based on the first row which has the column names
for col in execute format('select unnest(string_to_array(trim(temp_table::text, ''()''), '','')) from temp_table where col_1 = %L', col_first)
loop
execute format('alter table insert_from_csv rename column col_%s to %s', iter, col);
iter := iter + 1;
end loop;
-- delete the columns row
execute format('delete from insert_from_csv where %s = %L', col_first, col_first);
-- change the temp table name to the name given as parameter, if not blank
if length(target_table) > 0 then
execute format('alter table insert_from_csv rename to %I', target_table);
end if;
end;
$$ language plpgsql;
そして 渡すパラメータは
選択load_csv_fileとして( '顧客'、 'C:\ Insert_postgres.csv'、4)
が、エラーメッセージを取得することは
ERROR:でなければなりませんスーパーユーザーがファイルとの間でCOPYする ヒント:誰でもstdoutまたはstdinにCOPYできます。 psqlの\ copyコマンドは、誰にでも動作します。
私は自動テストを作成し、別のインスタンスでテストしたい場合、テストでは自動的に関数を作成し、CSVファイルからデータをコピーする必要があります。 スーパーユーザーなしでデータをコピーする方法はありますか?
実行中のユーザーにはファイルシステムに対するアクセス許可が必要です。私はこれが/ homeディレクトリにデフォルト設定されていると信じています。コピーファイルが存在するディレクトリで実行ユーザーに読み書きを許可することはできますか? – Mokadillion
はい、私が使用しているユーザーにはその権利があります。 – Geeme
https://stackoverflow.com/questions/20268420/postgres-copy-to-from-a-file-as-non-superuser –