Postgresql 错误消息:控件已到达过程末尾,但未返回
我在POSTGRES有一张不错的桌子:Postgresql 错误消息:控件已到达过程末尾,但未返回,postgresql,triggers,Postgresql,Triggers,我在POSTGRES有一张不错的桌子: CREATE TABLE public.pasajeros ( direccion_residencia character varying COLLATE pg_catalog."default", nombre character varying COLLATE pg_catalog."default", pasajero_id integer NOT NULL DEFAULT nextv
CREATE TABLE public.pasajeros
(
direccion_residencia character varying COLLATE pg_catalog."default",
nombre character varying COLLATE pg_catalog."default",
pasajero_id integer NOT NULL DEFAULT nextval('pasajeros_pasajero_id_seq'::regclass),
fecha_nacimiento date,
CONSTRAINT pasajeros_pkey PRIMARY KEY (pasajero_id)
)
我试图在每次插入新的pasajero时添加一个触发器,一个表存储总寄存器的新值,因此我创建了一个新表:
CREATE TABLE public.cont_pasajeros
(
total integer,
tiempo time with time zone,
id_t integer NOT NULL DEFAULT nextval('cont_pasajeros_id_t_seq'::regclass),
CONSTRAINT cont_pasajeros_pkey PRIMARY KEY (id_t)
)
然后,我创建了一个新函数以包含在触发器中:
DECLARE
count_ integer :=0;
BEGIN
count_ := (SELECT count (*) FROM pasajeros);
RAISE NOTICE 'number of registers %', count_;
INSERT INTO cont_pasajeros (total,tiempo) VALUES (count_, now());
END
然后我创建了触发器“在perse中”:
CREATE TRIGGER trigger_
AFTER INSERT ON pasajeros
FOR EACH ROW
EXECUTE PROCEDURE my_func();
当我尝试将新元组添加到表“pasajeros”中时出现问题:
INSERT INTO public.pasajeros(
direccion_residencia, nombre, fecha_nacimiento)
VALUES ('calle 1 a', 'benito', '2000-05-01');
发生错误:
错误消息:控制已到达过程末尾,但未返回
我做错了什么?显然一切正常。我使用的是pgAdmin4,这是我找到的解决方案:我修改了函数的代码,以包含ssstatement
RETURN NULL
DROP FUNCTION public.my_func();
CREATE FUNCTION public.my_func()
RETURNS trigger
LANGUAGE 'plpgsql'
COST 100
VOLATILE NOT LEAKPROOF
AS $BODY$
DECLARE
count_ integer :=0;
BEGIN
count_ := (SELECT count (*) FROM pasajeros);
RAISE NOTICE 'number of registers %', count_;
INSERT INTO cont_pasajeros (total,tiempo) VALUES (count_, now());
RETURN NULL; -- added to fix the error
END
$BODY$;
ALTER FUNCTION public.my_func()
OWNER TO postgres;