如何在PostgreSQL中仅指定一次多列的数据类型?



我必须从包含 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 过程。

  1. 使用创建表临时 ((;
  2. 通过使用循环添加具有数据类型 varchar 的临时列名称(如 col1,col2(。
  3. 使用 COPY 在临时表中复制 csv 文件。
  4. 从临时表中读取第一行,这将是CSV标题,即实际的列名。
  5. 使用实际列名使用循环重命名每个列。
  6. 删除标题行。

最新更新