【发布时间】:2021-12-07 20:37:47
【问题描述】:
我有一个包含 2 个日期列的表格
CREATE TABLE test
(
id serial PRIMARY KEY,
code integer NOT NULL,
eff_date timestamp default now(),
exp_date timestamp default '2025-12-31'
);
当插入具有相同code 的新行时,我想更新现有行的exp_date,旧行的exp_date 将比新行的eff_date 早一天. eff_date 或 exp_date 值都不会出现在插入查询中
例如:
| id | code | eff_date | exp_date |
|---|---|---|---|
| 1 | 12345 | 2021-01-31 | 2021-02-27 |
| 2 | 12345 | 2021-02-28 | 2021-03-30 |
| 3 | 12345 | 2021-03-31 | 2021-04-29 |
| 4 | 12345 | 2021-04-30 | 2021-05-30 |
| 5 | 12345 | 2021-05-31 | 2025-12-31 |
在此表中,当插入行id=2 时,我们希望通过检查最新的现有行(最近的eff_date)并更新它的@987654332 来更新id=1 的行@ 到新行的eff_date 前一天。
exp_date for id=1 将变为 2021-02-27,因为新行的 eff_date 是 2021-02-28。
这可以通过插入触发器来完成吗?
【问题讨论】:
标签: sql postgresql triggers postgres-10 postgresql-triggers