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,则更新表。

如何在postgresql中匹配列数,如果大于2,则更新表。

春季启动中的postgresql错误