批量插入到具有带参数化查询的数组列的 postgres 表中

问题描述 投票:0回答:1

我有下表:

┌────────────────┬─────────────────────────────┬───────────┬──────────┬──────────────────────────────────────────────────────────────────┐
│     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函数。

当一列是数组类型时,真的没有简单的方法可以通过参数化查询批量插入吗? 好像缺少功能...

postgresql multidimensional-array prepared-statement bulkinsert
1个回答
0
投票

我不喜欢它,但我使用了

jsonb[]
参数:

INSERT INTO "HistoricalDataAggregatorWorkOrders"
  ("inputTimeRange", "outputTags")
  SELECT (o->>'inputTimeRange')::tstzrange, (o->>'outputTags')::tag[]
    FROM unnest($1::jsonb[]) u(o)
  RETURNING id;

如果有人知道更优雅的方法,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.