将列添加到Postgres,源文件已更改

时间:2019-08-27 16:42:07

标签: postgresql

我从我们的一家供应商处获取数据文件。每行都是连续的字符串,其中大多数地方都已填写。它们有很多节,它们只是空格字符,可用作以后的列的填充位置。我有一个解析器,将其格式化为CSV,因此可以将其上传到postgres。今天,供应商通知我们,他们正在通过将其填充字段之一分为2列来添加一列。 X和填充器

例如,索引0:5是名称,5:20是填充符,20:X是其他内容。他们将5:20分为5:10和10:20,其中10:20仍然是占位符列。

 NAME1          AUHDASFAAF!@#!12312312541  -> NAME1, ,AUHDASFAAF,.....        

现在是

 NAME1AAAAA     AUHDASFAAF!@#!12312312541 -> NAME1,AAAAA, ,AUHDASFAAF,......

修改我的解析器以解决此更改很容易。如何编辑postgres表以接受CSV文件中的新列?理想情况下,我不想重新制作所有数据并将其重新上传到表中。

1 个答案:

答案 0 :(得分:0)

列按定义顺序排列。当您添加新列时,它会在末尾。没有直接的方法可以在中间添加一列。尽管insert values (...)很方便,但是您不应该依赖表中列的顺序。

various work arounds个,例如dropping and recreating the tabledropping and adding columns。这些都是很不方便的,如果有其他更改,您将不得不再次进行。

无论在insert还是select *中,都不要假设表中各列的顺序。您可以拼出所有列,也可以create a view指定列的顺序。

您不必手动写出列。从information_schema.columns获取它们,并根据需要编辑它们的顺序以进行查询或设置视图。

select column_name
from information_schema.columns
where table_name = ?