ERROR: missing data for column when using COPY FROM PROGRAM in psql

ERROR: missing data for column when using COPY FROM PROGRAM in psql

我正在尝试使用 psql 中的下一个命令从 cURL 导入数据:

COPY testtable FROM PROGRAM 'curl https://.....'

这是URL中的数据:

[{"date":"20201006T120000Z","uri":"secret","val":"1765.756"},{"date":"20201006T120500Z","uri":"secret","val":"2015.09258"},{"date":"20201006T121000Z","uri":"secret","val":"2283.0885"}]

但是psql returns

ERROR: missing data for column "uri"

我试过将其复制到表格中,其中列为文本和 json 格式。还尝试添加 (DELIMITER ',') 但是 returns

ERROR: extra data after last expected column

我觉得问题可能是数据开头和结尾的“[]”引起的,但我不确定。

这些是我使用的表格的定义。

Table "public.test_table"

Column Type Modifiers
date text not null
uri text
val text

索引: “test_table_pkey”主键,btree(日期)

Table "public.test_table2"

Column Type Modifiers
date json
uri json
val json

COPY 仅支持 csv、文本和二进制格式。它不支持 JSON。它将作为一个整体将数据导入或导出 json 个字段,但不会 assemble 或解析它们。

您可以使用单行一列的分段 table。

create temp table stage(x jsonb);

COPY stage FROM PROGRAM 'curl https://.....';

insert into test_table select f.* from stage,
   jsonb_populate_recordset(null::test_table, x) f;

如果 PostgreSQL 提供了一个 pg_read_program() 函数,您可以直接使用它而不是创建一个阶段 table。但它没有(但你可以用 C 或 plpythonu 或 plperlu 制作一个)