我有下表:
┌────────────────┬─────────────────────────────┬───────────┬──────────┬──────────────────────────────────────────────────────────────────┐
│ Column │ Type │ Collation │ Nullable │ Default │
├────────────────┼─────────────────────────────┼───────────┼──────────┼──────────────────────────────────────────────────────────────────┤
│ id │ bigint │ │ not null │ nextval('"HistoricalDataAggregatorWorkOrders_id_seq"'::regclass) ││
│ inputTimeRange │ tstzrange │ │ not null │ │
│ outputTags │ tag[] │ │ not null │ │
└────────────────┴─────────────────────────────┴───────────┴──────────┴──────────────────────────────────────────────────────────────────┘
我想在一个参数化查询中批量插入一堆行。 我以为我可以用通常的方式来做到这一点
unnest
:
INSERT INTO "HistoricalDataAggregatorWorkOrders"
("inputTimeRange", "outputTags")
SELECT * from unnest($1::tstzrange[], $2::tag[][])
RETURNING id;
但不幸的是,
unnest
不能按我想要的方式工作(它会使数组变平)。
我从https://stackoverflow.com/a/8142998/200224得知没有内置的unnest-one-level函数。
当一列是数组类型时,真的没有简单的方法可以通过参数化查询批量插入吗? 好像缺少功能...
我不喜欢它,但我使用了
jsonb[]
参数:
INSERT INTO "HistoricalDataAggregatorWorkOrders"
("inputTimeRange", "outputTags")
SELECT (o->>'inputTimeRange')::tstzrange, (o->>'outputTags')::tag[]
FROM unnest($1::jsonb[]) u(o)
RETURNING id;
如果有人知道更优雅的方法,请告诉我。