Не может сделать функцию в postgresql - PullRequest
1 голос
/ 25 марта 2020

Я не новичок в postgresql, но также я не совсем специалист.

Я выполнил это 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;

Возвращается «Запрос успешно возвращен с ...»

Когда я пытаюсь проверить, существует ли он:

select * from pg_trigger where tgname = 'trg_corrigeer_geometrie'

Это дает мне пустую таблицу. Я не понимаю, почему? Функция publi c .cleangeometry действительно существует, она не выдает ошибку, поэтому ни одна из этих проблем не может быть проблемой. Я действительно немного озадачен этим.

1 Ответ

3 голосов
/ 25 марта 2020

Вы успешно создали функцию. Теперь вам нужно привязать его к фактическому триггеру:

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(), чтобы первый можно было использовать в качестве имени триггера.

Демонстрация на 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     | <em>null</em>   | <em>null</em>       | <em>null</em>      
...