PostgreSQL - 如何保持列更新
Posted
技术标签:
【中文标题】PostgreSQL - 如何保持列更新【英文标题】:PostgreSQL - How to keep a column updated 【发布时间】:2018-11-25 00:59:09 【问题描述】:我是 SQL 新手,我正在尝试更新表 (ex_table) 的列 (ex_counter)。此列包含一个 ID (ex_id) 出现在第二个表(ex2_table 中的 ex2_id)上的次数的计数器。
可以随时将 ID 插入到第二个表中。如果该 ID 已经存在,则必须更新第一个表中其对应 ID 的计数器(我猜只需加 1)。
这是两张表:
CREATE TABLE ex_table(
ex_id SMALLINT,
ex_counter SMALLINT;)
CREATE TABLE ex2_table(
ex2_id SMALLINT;)
我认为应该或多或少地这样做。注释的代码是我不知道如何实现的伪代码:
CREATE TRIGGER ex_trigger AFTER
INSERT ON ex2_table
FOR EACH ROW EXECUTE PROCEDURE ex_func();
CREATE FUNCTION ex_func() RETURNS trigger AS $$ BEGIN
/*
if ex2_id = ex_id
ex_counter = ex_counter + 1
*/
RETURN NULL;
END;
$$ LANGUAGE plpgsql;
提前致谢!
【问题讨论】:
【参考方案1】:类似的东西
IF EXISTS (SELECT * FROM ex_table WHERE ex_id = new.ex2_id) THEN
UPDATE ex_table
SET ex_counter = ex_counter + 1
WHERE ex_id = new.ex2_id
ELSE
INSERT INTO ex_table VALUES (new.ex2_id, 1)
END IF;
请注意,实际上存储计数器是没有意义的,因为您可以通过执行 SELECT COUNT() 轻松检索值...
【讨论】:
以上是关于PostgreSQL - 如何保持列更新的主要内容,如果未能解决你的问题,请参考以下文章
如何为没有已知列的 PostgreSQL 视图编写通用更新触发器?
如何使用 jOOQ 更新 PostgreSQL 上复合列的单个子字段?
如何根据PostgreSQL中同一行的两个不同列更新具有唯一序列号的列?
如何在postgresql中匹配列数,如果大于2,则更新表。