Postgresql 错误消息:控件已到达过程末尾,但未返回

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

我在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 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();
    
  • 执行新代码,包括returnnull语句

    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;