I am trying to have a parameter when creating a trigger function.
I have been trying to use this code:
DO $DO$
BEGIN
EXECUTE format($TRIGGER$
CREATE OR REPLACE FUNCTION my_schema.my_trigger_fcn() RETURNS trigger AS
$BODY$
DECLARE
my_geom geometry(MultiPoint,%1$s);
BEGIN
my_geom = st_collect(NEW.situation_geometry)::geometry(MultiPoint,%$1s);
NEW.geometry = my_geom;
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql;
$TRIGGER$, :SRID);
END
$DO$;
and trying to run this code with psql -v SRID=2056 -f myfile.
But I get a syntax error.
I have also tried the SQL execute command, but prepared statements are not allowed to create trigger function.
Any idea?
SOLUTION:
Thanks to @Pavel Stehule, here is the code that works:
SELECT set_config('my.srid', :SRID::text, false);
DO $DO$
BEGIN
EXECUTE format($TRIGGER$
CREATE OR REPLACE FUNCTION qgep_od.my_trigger_fcn() RETURNS trigger AS
$BODY$
DECLARE
my_geom geometry(MultiPoint,%1$s);
BEGIN
my_geom = st_collect(NEW.situation_geometry)::geometry(MultiPoint,%1$s);
NEW.geometry = my_geom;
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql;
$TRIGGER$, current_setting('my.srid'));
END
$DO$;