gpt4 book ai didi

postgresql - 在基于其他列的列中插入一个数字 OLD INSERTs

转载 作者:行者123 更新时间:2023-11-29 13:56:25 27 4
gpt4 key购买 nike

在 PostgreSQL 中,我有这个表...(最左侧的“timestamp02”中有一个主键,此图中未显示,请不要打扰,它对于这个问题的目的并不重要)

enter image description here

在上表中,所有列都是通过查询输入的,除了“time_index”,我希望在每次填充每一行时通过触发器自动填充它。

这是创建相同表(没有任何值)的代码,因此每个人都可以使用 Postgre SQL 查询面板创建它。

CREATE TABLE table_ebscb_spa_log02
(
pcnum smallint,
timestamp02 timestamp with time zone NOT NULL DEFAULT now(),
fn_name character varying,
"time" time without time zone,
time_elapse character varying,
time_type character varying,
time_index real,
CONSTRAINT table_ebscb_spa_log02_pkey PRIMARY KEY (timestamp02)
)
WITH (
OIDS=FALSE
);
ALTER TABLE table_ebscb_spa_log02
OWNER TO postgres;

我希望触发器执行的操作是:

根据每一行中“fn_name”和“time_type”列的插入值,在“time_index”列中插入一个数字。

如果两者(“fn_name”和“time_type”)做的组合(例如检查邮件 - 开始)在之前(上文)的任何行中都不存在,则在“time_index”列中插入 1,

Elif both ("fn_name"and "time_type") 做一个确实存在于之前(上图)某行中的组合,然后在“time_index”列中插入之前(上图)后面的数字。

(请查看示例表格图像,此触发器将生成其上的每个红色突出显示的方 block )

我看了很多,PostgreSQL教程视频,看了很多手册,包括这些

http://www.postgresql.org/docs/9.4/static/sql-createtrigger.html http://www.postgresql.org/docs/9.4/static/plpgsql-trigger.html

没有任何结果。

到目前为止,我已经尝试过创建函数:

CREATE OR REPLACE FUNCTION on_ai_myTable() RETURNS TRIGGER AS $$
DECLARE
t_ix real;
n int;

BEGIN
IF NEW.time_type = 'Start' THEN
SELECT t.time_index FROM table_ebscb_spa_log02 t WHERE t.fn_name = NEW.fn_name AND t.time_type = 'Start' ORDER BY t.timestamp02 DESC LIMIT 1 INTO t_ix;
GET DIAGNOSTICS n = ROW_COUNT;
IF (n = 0) THEN
t_ix = 1;
ELSE
t_ix = t_ix + 1;
END IF;
END IF;
NEW.time_index = t_ix;
return NEW;
END
$$
LANGUAGE plpgsql;

创建查询:

CREATE TRIGGER on_ai_myTable
AFTER INSERT ON table_ebscb_spa_log02
FOR EACH ROW
EXECUTE PROCEDURE on_ai_myTable();

然后当我在表中手动插入值时,没有任何变化(没有错误消息)time_index 列保持为空,我做错了什么???

请一些优秀的 PostgreSQL 程序员帮我一把,我真的已经到了这个任务的死点,我还有更多的想法。

提前致谢

最佳答案

AFTER INSERT 触发器中,您对 NEW.time_index 所做的任何更改都将被忽略。此时记录已经插入;修改它为时已晚。

改为将触发器创建为 BEFORE INSERT

关于postgresql - 在基于其他列的列中插入一个数字 OLD INSERTs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30942869/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com