【问题标题】:PostgreSQL: Import columns into table, matching key/IDPostgreSQL:将列导入表,匹配键/ID
【发布时间】:2016-07-27 11:08:40
【问题描述】:

我有一个 PostgreSQL 数据库。我不得不用更多的列来扩展现有的大表。

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

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

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

Edit2:我找到了this question here on SO,它通过使用临时表提供了答案。我想我会使用它——尽管它更像是一种变通方法而不是实际的解决方案。

【问题讨论】:

  • 是的,可以这样做
  • 嘿,谢谢。也许你甚至可以告诉我怎么做?
  • 你没有问。您可以通过巧妙地使用 COPY 来做到这一点
  • 这就是我现在问的原因 - 并编辑了帖子。

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


【解决方案1】:

PostgreSQL 可以使用 COPY 语句直接从 CSV 文件导入数据,但是正如您所说,这仅适用于新行。

您可以只生成必要的 SQL UPDATE 语句,而不是创建 CSV 文件。

假设这是 CSV 文件

PK;ExtraCol1;ExtraCol2
1;"foo",42
4;"bar",21

然后只需生成以下内容

UPDATE my_table SET ExtraCol1 = 'foo', ExtraCol2 = 42 WHERE PK = 1;
UPDATE my_table SET ExtraCol1 = 'bar', ExtraCol2 = 21 WHERE PK = 4;

您似乎在 Windows 下工作,所以我真的不知道如何在那里完成此操作(可能使用 PowerShell),但在 Unix 下,您可以使用 awksed 等工具轻松地从 CSV 生成 SQL .支持正则表达式的编辑器可能也足够了。

【讨论】:

    猜你喜欢
    • 2015-08-13
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    • 2013-05-03
    • 2021-12-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    相关资源
    最近更新 更多