无法在postgresql中创建函数

Can not make function in postgresql

我不是 postgre 的新手sql,但我也不是专家。

我已经执行了这个 sql 以在 postgresql 中创建一个函数:

CREATE OR REPLACE FUNCTION public.trg_corrigeer_geometrie()
  RETURNS trigger AS
$BODY$    
    BEGIN
        IF NOT (st_isvalid(NEW.geometry)) THEN
            NEW.geometry := st_multi(public.cleangeometry(NEW.geometry));
        END IF; 
        RETURN NEW;
    END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION public.trg_corrigeer_geometrie()
  OWNER TO postgres;

它返回 "Query returned sucessfully with ... "

当我尝试检查它是否存在时:

select * from pg_trigger where tgname = 'trg_corrigeer_geometrie'

它给了我一个空 table。我真的不明白为什么?函数 public.cleangeometry 确实存在,它不会给我一个错误,所以 none 可能是问题所在。我真的有点莫名其妙。

您已成功创建函数。现在你需要将它绑定到一个实际的触发器:

create trigger trg_corriger_geometrie
before insert -- or "update" ?
on mytable
for each row
    execute procedure func_corriger_geometrie()
;

我将函数从 trg_corriger_geometrie() 重命名为 func_corriger_geometrie() 因此前者可以用作触发器名称。

Demo on DB Fiddle:

oid    | tgrelid | tgname                 | tgfoid | tgtype | tgenabled | tgisinternal | tgconstrrelid | tgconstrindid | tgconstraint | tgdeferrable | tginitdeferred | tgnargs | tgattr | tgargs | tgqual | tgoldtable | tgnewtable
:----- | :------ | :--------------------- | :----- | -----: | :-------- | :----------- | :------------ | :------------ | :----------- | :----------- | :------------- | ------: | :----- | :----- | :----- | :--------- | :---------
367288 | 367284  | trg_corriger_geometrie | 367287 |      7 | O         | f            | 0             | 0             | 0            | f            | f              |       0 |        | \x     | null   | null       | null