Postgres:使用给定的键集和默认值创建jsonb对象

Postgres:使用给定的键集和默认值创建jsonb对象,json,postgresql,jsonb,postgresql-9.6,Json,Postgresql,Jsonb,Postgresql 9.6,我正在使用PostgreSQL 9.6。我有一个类似数组['a',b']::text[]的数组,它来自应用程序代码,在SQL中经过了一些转换,所以我不知道它在应用程序代码中的长度 在一个表中,我有一个jsonb类型的字段,我需要将其设置为json对象,其中键是来自给定数组的值,这些值都相同并等于当前时间戳,即 | id | my_field | ------------------------------------

我正在使用PostgreSQL 9.6。我有一个类似数组['a',b']::text[]的数组,它来自应用程序代码,在SQL中经过了一些转换,所以我不知道它在应用程序代码中的长度

在一个表中,我有一个jsonb类型的字段,我需要将其设置为json对象,其中键是来自给定数组的值,这些值都相同并等于当前时间戳,即

| id | my_field                                         |
---------------------------------------------------------
| 1  | {"a":"1544605046.21065", "b":"1544605046.21065"} |
我正在尝试查找更新查询以执行此更新,例如

UPDATE mytable 
SET my_field = some_function(ARRAY['a','b']::text[], EXTRACT(EPOCH FROM CURRENT_TIMESTAMP)
WHERE <some_condition>;
我正在研究jsonb_build_对象函数,如果我能转换数组,将其元素与当前时间戳交错,它可能会对我有所帮助,但是我没有找到一种方法来做到这一点

请注意,我可能有数十万条记录要更新,因此我正在寻找一个快速的实现

如能就此事提供任何意见,我将不胜感激

要将数组元素用作json对象的键,需要通过unnest将它们分开。这将为每个元素创建一行。 使用jsonb_object_aggkey,value聚合行。作为键,您将获取数组元素的列。作为当前_时间戳的值。此函数聚合到您期望的语法中。 将其放入子查询可以进行更新。
UPDATE my_table
SET my_field = s.json_data
FROM (
    SELECT jsonb_object_agg(key, extract(epoch from current_timestamp)) as json_data
    FROM unnest(array['a', 'b']) as u(key)
) s
WHERE <some condition>