有没有办法将原始数据输入 PostgreSQL 以复制除某些列以外的行?

Is there a way to enter raw data into PostgreSQL to duplicate a row except certain columns?

我有一个 csv 原始文件,其中包含地址等个人信息:每个地址有两列,还有两个不同的地址(总共四个字段)。

所以我的 CSV 中可能有 Fred, Flinstone, ID#12345678, 123 Street, Apt 6, Seattle, WA, 87319, 567 5th Ave, Seattle, WA, 87321 以及我需要的其他几个列。

我的问题是,有没有一种方法可以导入或设置一个 CREATE TABLE 语句来获取这些数据并将其分成两行:

0: Fred, Flinstone ID#12345678, 123 Street, APT 6, Seattle, WA, 87319

1: Fred, Flinstone ID#12345678, 567 5th Ave, Seattle, WA, 87312

我知道有 Array_arg 用于将数组拆分为不同的行,但我不知道如何从中填充新的 table。基本上我现在的问题是我们只使用 primary/first 列出的地址来设置这个数据库,现在在尝试加入这个 table 时会导致严重问题。我 不想 设置两个 table 我可以加入以获得两个地址的地方。我只是想知道是否有办法在导入时执行此操作,因为我的搜索没有找到我要找的东西。

有两种方法可以解决这个问题:

  • 使用外部数据包装器
  • 使用复制和暂存 table。

您可以定义一个可以访问 csv table 的外部 table,就像它是具有外部数据包装器的 sql table 一样。然后,您可以使用 insert as select 在目标 table 中插入记录。您需要将 运行 插入为 select 两次:首先用于主地址,然后用于辅助地址。

您可以先使用复制命令将 table 加载到分段 table 中,而不是使用外部数据包装器方法。然后使用暂存 table 将 运行 作为 select 插入到目标 table 中。