【问题标题】:POSTGRES COPY FROM PROGRAM into a dynamic table with unknown columnsPOSTGRES COPY FROM PROGRAM 到具有未知列的动态表中
【发布时间】:2021-05-27 05:43:08
【问题描述】:

我希望从 .csv 文件中进行复制,该文件可以是任何没有的任何内容。的列。我需要将这些插入到根据文件中的列数动态创建的表中。 csv 位于一个 url,例如 https://data.sfgov.org/api/views/yitu-d5am/rows.csv

如何使用 postgres COPY FROM COMMAND 来实现这一点?有什么想法吗?

【问题讨论】:

  • 您不能这样做,因为COPY 不会为您创建表。编写程序。

标签: postgresql


【解决方案1】:

由于您事先不知道行数/类型,所以我建议您这样做:

  • (1) 将您的 CSV 导入到(临时?)表中,其中包含单个文本列而不进行拆分。使用backspace 字符作为分隔符,以便整个导入的行保持不变;
CREATE TABLE IF NOT EXISTS rawtext_t (rawtext text);
COPY rawtext_t FROM <file_name> WITH (format 'csv', delimiter E'\b');
  • (2) 运行 splits the CSV into a text array - 函数 parse_csv 的查询,然后使用相关的文本数组的结果集(可能映射/插入到“真实”目标表中)
WITH rawdata AS
(
 SELECT parse_csv(rawtext) arr FROM rawtext_t
) 
INSERT INTO real_t (...fields...) 
SELECT arr[1], arr[3], ...
FROM rawdata;

TRUNCATE TABLE rawtext_t;

您可以在第二个SELECT 语句中添加WHERE 子句,以便在必要时过滤传入的行。

另一种选择——在我的理解中非常好——是使用出色的file_textarray_fdw 来达到或多或少相同的效果。

希望这能给您提供想法和帮助。

【讨论】:

  • 非常感谢,很抱歉延迟回来。我会试试这个解决方案!
猜你喜欢
  • 2015-03-07
  • 1970-01-01
  • 1970-01-01
  • 2013-01-10
  • 1970-01-01
  • 2014-05-05
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
相关资源
最近更新 更多