我必须从包含 100 多列的 csv 文件导入数据。我尝试使用 PgAdmin 和 phpPgAdmin 导入,但它们都要求我先创建包含列的表。逐一导入列非常耗时。我想让它变得简单,因为所有列都具有相同的数据类型,即文本。
众所周知,下面的代码不起作用,因为我必须为每列指定数据类型,这很耗时。
CREATE TABLE my_table (
col_1 , col_2, ......., col_100
)
有没有办法执行上述操作,只为所有列指定一次数据类型?谢谢
最简单的方法!
1-将csv标头复制到新文件中csv。 2-使用notpad++手动编辑文件以透视数据(将";"替换为";"(,以便在一列中获取100列。假设列名不包含 CSV 的分隔符。
3-将列复制到temp_table中,从/tmp/listclmn复制"tmp_table".csv...(不带标题子句(
4-将表的 ddl 生成为
select 'create table my_table('
union
select concat(colname, ' text, ')
union
select ');'
/* 删除文本的最后一个逗号,最后一列 */
5-创建生成的表并使用HEADER子句从原始csv复制所有数据。
没有这样的方法可以做到这一点,但是如果您想在不手动写入列名的情况下导入 CSV 文件,那么您可以使用以下逻辑编写 postgres 过程。
- 使用创建表临时 ((;
- 通过使用循环添加具有数据类型 varchar 的临时列名称(如 col1,col2(。
- 使用 COPY 在临时表中复制 csv 文件。
- 从临时表中读取第一行,这将是CSV标题,即实际的列名。
- 使用实际列名使用循环重命名每个列。
- 删除标题行。