任何方式导入CSV文件到postgresql没有创建新的表从无到有?



我有2个文件,我想用pgAdmin4把它们导入到PostgreSql,所以我知道的唯一方法就是创建表,手动创建列和所有的东西,但这将花费很多时间,希望我没有错过任何东西,所以任何方法都可以简单地导入它们,PostgreSql认为标题作为列,创建表,节省了我大量的时间。我对这一切都不熟悉,所以我的问题形式可能是错误的,但这是我能问的最好的问题。

这是我在这里找到的一种方法。基本上,您可以在Postgres中调用函数(最后一个参数指定列的数量)。

CREATE OR REPLACE FUNCTION load_csv_file(
target_table text,
csv_path text,
col_count integer)
RETURNS void AS
$BODY$
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 temp_table ();
-- add just enough number of columns
for iter in 1..col_count
loop
execute format('alter table temp_table add column col_%s text;', iter);
end loop;
-- copy the data from csv file
execute format('copy temp_table from %L with delimiter '','' quote ''"'' csv ', csv_path);
iter := 1;
col_first := (select col_1 from temp_table 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 temp_table rename column col_%s to %s', iter, col);
iter := iter + 1;
end loop;
-- delete the columns row
execute format('delete from temp_table 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 temp_table rename to %I', target_table);
end if;
end;
$BODY$
LANGUAGE plpgsql;
ALTER FUNCTION load_csv_file(text, text, integer)
OWNER TO postgres;

使用此函数创建表

select load_csv_file('myTable','C:/MyPath/MyFile.csv',24)

最新更新