[英]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 返回
错误:“uri”列缺少数据
我尝试将其复制到列为文本和 json 格式的表格上。 还尝试添加(DELIMITER ',')
但返回
错误:最后一个预期列之后的额外数据
我觉得问题可能是由数据开头和结尾的“[]”引起的,但我不确定。
这些是我使用的表的定义。
表“public.test_table”
柱子 | 类型 | 修饰符 |
---|---|---|
日期 | 文本 | 不是 null |
乌里 | 文本 | |
值 | 文本 |
索引:“test_table_pkey”PRIMARY KEY,btree(日期)
表“public.test_table2”
柱子 | 类型 | 修饰符 |
---|---|---|
日期 | json | |
乌里 | json | |
值 | json |
COPY 仅支持 csv、文本和二进制格式。 它不支持 JSON。 它将作为一个整体将数据导入或导出到 json 字段中或从中导出,但不会组装或解析它们。
您可以使用一行一列的临时表。
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() function,您可以直接使用它而不是创建阶段表。 但它没有(但你可以在 C 或 plpythonu 或 plperlu 中制作一个)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.