【发布时间】:2021-12-12 11:05:55
【问题描述】:
我正在试验时间序列,并将数据放在 Postgres 数据库表中,如下所示:
CREATE TABLE IF NOT EXISTS public.time_series(
id integer NOT NULL,
datetime timestamp with time zone NOT NULL,
value real NOT NULL,
edit_datetime timestamp with time zone NOT NULL DEFAULT now())
现在,当我从 Python 插入数据时,我会创建一个临时表并将其插入到不存在此观察结果的主表中。
INSERT INTO time_series(id, datetime, value)
SELECT temp_time_series.id, temp_time_series.datetime, temp_time_series.value
FROM temp_time_series
WHERE NOT EXISTS (
SELECT 'X'
FROM time_series
WHERE temp_time_series.id = time_series.id
AND temp_time_series.datetime = time_series.datetime
AND temp_time_series.value = time_series.value)"""
它似乎运行得非常快,这是它所需要的。
如果我只想用新值更新时间序列观察并更新编辑时间戳,而不是插入新行,该怎么办? 我没有任何主键,有时我需要使用旧版本的 DateTime 但具有不同的 edit_datetimes。所以我不知道它是否适用于创建基于 id 和 DateTime 的约束,我也不知道该怎么做或如何编辑代码来处理。
有人有什么建议吗?
BR
【问题讨论】:
-
你需要一种方法来识别行,并且每个表都应该有一个主键。
-
感谢关于主键@LaurenzAlbe 的评论我已经阅读了更多关于为什么这是一个好主意的内容。在能够插入同一时期的数据并更新该时期的观察方面,我仍然有一些麻烦。
标签: sql postgresql timescaledb