我有一个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通过使用临时表提供答案。我想我会用它 - 虽然它更像是一种解决方法,而不是一种实际的解决方案。
答案 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();
。具有正则表达式支持的编辑器也可能就足够了。