无法在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()
因此前者可以用作触发器名称。
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
我不是 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()
因此前者可以用作触发器名称。
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