Database 错误:在psql中使用“从程序复制”时缺少列的数据
我正在尝试使用psql中的下一个命令从cURL导入数据:Database 错误:在psql中使用“从程序复制”时缺少列的数据,database,postgresql,curl,psql,postgresql-copy,Database,Postgresql,Curl,Psql,Postgresql Copy,我正在尝试使用psql中的下一个命令从cURL导入数据: 从程序“curl”复制测试表https://.....“ 这是URL中的数据: [{“日期”:“20201006T120000Z”,“uri”:“机密”,“val”:“1765.756”},{“日期”:“20201006T120500Z”,“uri”:“机密”,“val”:“2015.09258”},{“日期”:“20201006T121000Z”,“uri”:“机密”,“val”:“2283.0885”}] 但是psql返回了 错误:“
从程序“curl”复制测试表https://.....“
这是URL中的数据:
[{“日期”:“20201006T120000Z”,“uri”:“机密”,“val”:“1765.756”},{“日期”:“20201006T120500Z”,“uri”:“机密”,“val”:“2015.09258”},{“日期”:“20201006T121000Z”,“uri”:“机密”,“val”:“2283.0885”}]
但是psql返回了
错误:“uri”列缺少数据
我尝试在列为文本和json格式的表上复制它。还尝试添加(分隔符',')
,但返回
错误:上一个预期列之后有额外数据
我觉得问题可能是由数据开头和结尾的“[]”引起的,但我不确定
这些是我使用的表的定义
表“public.test_表”
纵队
类型
修饰语
日期
文本
非空
uri
文本
瓦尔
文本
复制仅支持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()函数,您可以直接使用它,而不是创建一个stage表。但是它没有(但是你可以用C,或者plpythonu或者plperlu制作一个)test_table的定义是什么?@jjanes我刚刚编辑了这篇文章并添加了所用表的定义。