首页 > 解决方案 > 在具有共享列名的表上插入冲突(更新插入)

问题描述

我有两个表 t1 和 t2,它们都有一个名为ts. 表 t1ts具有每小时时间戳,表 t2ts具有每日时间戳。t1 代表每小时汇总的数据,t2 代表每天汇总的数据。在表 t2 上,我对该ts列有一个唯一约束,以允许对ts.

我将数据从 t1 插入到 t2:

insert into t2
select time_bucket('1 day', ts) as bucketed_ts, first(some_value, ts) first_some_value
from t1
group by bucketed_ts
on conflict (ts)
do update 
set 
  some_value = excluded.some_value;

在这种情况下,考虑到两个表具有不同粒度的时间戳的同一ts列,我想了解tson conflict 子句中的哪一列是指 - t1 或 t2。如果它指的是 t1 的 ts,我将不得不使用 tbucketed_ts而不是 raw ts,因为 t1 的粒度ts是每小时,而所需的粒度是每天。

标签: sqlpostgresql

解决方案


ON CONFLICT (ts)

指要插入行的表 ( t2),因为唯一约束违规只能发生在该表上。


推荐阅读