sql - 在具有共享列名的表上插入冲突(更新插入)
问题描述
我有两个表 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
列,我想了解ts
on conflict 子句中的哪一列是指 - t1 或 t2。如果它指的是 t1 的 ts,我将不得不使用 tbucketed_ts
而不是 raw ts
,因为 t1 的粒度ts
是每小时,而所需的粒度是每天。
解决方案
ON CONFLICT (ts)
指要插入行的表 ( t2
),因为唯一约束违规只能发生在该表上。
推荐阅读
- flutter - 如何在 Flutter Windows 应用程序中打开 PDF 文件
- reactjs - 开发时在 Github 页面上托管 React 项目
- javascript - 由于访问控制检查,无法加载带有数据的 JS 客户端/Python 服务器 XMLHttpRequest 帖子
- javascript - 如果输入值为零,则仅通过正则表达式禁用按钮
- c++ - 如何用c++解压?
- javascript - 使用 Node JS 动态编辑 word 文档并替换文本和图像占位符
- python - Python Asyncio 中的请求返回“无”
- java - 无法使用 jsoup 获取页面内容
- azure - 我可以在 Azure 数据工厂中创建自定义错误语句而不是自动生成错误语句吗
- python - 如何从 Tkinter GUI 中删除警告标签