【发布时间】:2018-09-03 12:17:30
【问题描述】:
我正在使用具有 jsonb 列的 Postgres 表。我已经能够创建一个记录集以将 json 转换为 jsonb 对象中的行。我正在努力将timestamp 从 UNIX 转换为可读时间戳。
这是jsonb 对象在timestamp 存储为UNIX 时的样子:
{
"signal": [
{
"id": "e80",
"on": true,
"unit": "sample 1",
"timestamp": 1521505355
},
{
"id": "97d",
"on": false,
"unit": "sample 2",
"timestamp": 1521654433
},
{
"id": "97d",
"on": false,
"unit": "sample 3",
"timestamp": 1521654433
}
]
}
理想情况下,我希望它看起来像这样,但timestamp 出现错误
id | on | unit | timestamp
---+------+----------+--------------------------
e80|true | sample 1 | 2018-03-20 00:22:35+00:00
97d|false | sample 2 | 2018-03-21 17:47:13+00:00
97d|false | sample 3 | 2018-03-21 17:47:13+00:00
这是我目前所拥有的,它返回列的预期值,但给timestamp 列提供错误
select b.*
from device d
cross join lateral jsonb_to_recordset(d.events->'signal') as
b("id" integer, "on" boolean, "unit" text, "timestamp" timestamp)
timestamp 数据类型正在引发错误。
[22008] 错误:日期/时间字段值超出范围
非常感谢任何有关将timestamp 从 UNIX 转换为实际时间戳的帮助或建议。
【问题讨论】:
标签: arrays postgresql timestamp sqldatatypes jsonb