Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Postgres SQL - error: must be superuser to copy to or from a file

I have copied function(from one of the webportal and modified accordingly) to copy data from csv file to table.

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;

And passing parameters as

select load_csv_file('Customer','C:\Insert_postgres.csv' ,4)

but getting error message

ERROR: must be superuser to COPY to or from a file Hint: Anyone can COPY to stdout or from stdin. psql's \copy command also works for anyone.

The idea is, i will create a automated test, and if i want to test on different instance then test should automatically create function and copy data from csv file. Is there any work around to copy data without superuser?

like image 671
Geeme Avatar asked Sep 05 '25 03:09

Geeme


1 Answers

Looks Insert_postgres.csv is in C drive which usually does not have Read/Write permission. Move the file to your directory where Read/Write given atleast to some groups or everyone. Hope it will resolve the issue

like image 137
priya raj Avatar answered Sep 07 '25 20:09

priya raj