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 制作一个)
我正在尝试使用 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 制作一个)