ฉันใช้ฟังก์ชันนี้มาระยะหนึ่งแล้วโดยไม่มีปัญหา คุณเพียงแค่ระบุคอลัมน์ตัวเลขที่มีอยู่ในไฟล์ csv และจะใช้ชื่อส่วนหัวจากแถวแรกและสร้างตารางให้คุณ:
create or replace function data.load_csv_file
(
target_table text,
csv_file_path text,
col_count integer
)
returns void
as $$
declare
iter integer;
col text;
col_first text;
begin
set schema 'data';
create table temp_table ();
for iter in 1..col_count
loop
execute format ('alter table temp_table add column col_%s text;', iter);
end loop;
execute format ('copy temp_table from %L with delimiter '','' quote ''"'' csv ', csv_file_path);
iter := 1;
col_first := (select col_1
from temp_table
limit 1);
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 temp_table rename column col_%s to %s', iter, col);
iter := iter + 1;
end loop;
execute format ('delete from temp_table where %s = %L', col_first, col_first);
if length (target_table) > 0 then
execute format ('alter table temp_table rename to %I', target_table);
end if;
end;
$$ language plpgsql;
table
? สับสนมาก มีตารางอยู่หรือไม่หรือคุณต้องการสร้างตาม CSV (คุณทำไม่ได้)