PostgreSQL:将列导入表中,匹配键/ ID

时间:2016-07-27 11:08:40

标签: postgresql relational-database psql postgresql-9.2 pgadmin

我有一个PostgreSQL数据库。我不得不扩展一个现有的大表,还有几列。

现在我需要填写这些列。我想我可以创建一个.csv文件(在Excel / Calc之外),其中包含现有行的ID /主键 - 以及新的空字段的数据。有可能这样做吗?如果是,怎么样?

我记得使用Microsoft SQL Management Server很容易做到这一点,但是对于PostgreSQL,我使用的是PG Admin(但如果它有帮助,我愿意切换工具)。我尝试使用PG Admin的导入功能,它使用PostgreSQL的COPY功能,但似乎COPY并不合适,因为它只能创建全新的行。

编辑:我想我可以编写一个脚本来加载csv并使用UPDATE迭代行。但我不想重新发明轮子。

Edit2:我发现this question here on SO通过使用临时表提供答案。我想我会用它 - 虽然它更像是一种解决方法,而不是一种实际的解决方案。

1 个答案:

答案 0 :(得分:1)

PostgreSQL可以使用PK;ExtraCol1;ExtraCol2 1;"foo",42 4;"bar",21 语句直接从CSV文件导入数据,但这只能用于新行。

您可以只生成必要的SQL UPDATE my_table SET ExtraCol1 = 'foo', ExtraCol2 = 42 WHERE PK = 1; UPDATE my_table SET ExtraCol1 = 'bar', ExtraCol2 = 21 WHERE PK = 4; 语句,而不是创建CSV文件。

假设这是CSV文件

awk

然后生成以下内容

sed

您似乎在Windows下工作,所以我真的不知道如何在那里完成这项工作(可能使用PowerShell),但在Unix下,您可以使用public class Product { [Key] public int ID { get; set; } public ICollection<Review> Reviews {get; set;} } public class Review { [Key] public int ID { get; set; } public Product Product {get; set;} public Customer Author { get; set; } } public class Customer { [Key] public int ID { get; set; } public ICollection<Review> Reviews { get; set; } } 等工具轻松地从CSV生成SQL或context.Products.Include(p=> p.Reviews.Select(r => r.Author)).ToList(); 。具有正则表达式支持的编辑器也可能就足够了。