[postgis-users] Trigger Function for Updating Geom

Willem Buitendyk willem at pcfish.ca
Wed Jan 23 01:19:44 PST 2008


What you revised makes more sense;  however, the problem now is that the 
geom column does not update at all.  I modified the function to include
RETURN NEW;

CREATE or replace FUNCTION make_geom () RETURNS trigger as
$BODY$
BEGIN
NEW.hydgeom = GeometryFromText('POINT (' || cast(NEW.longitude as 
varchar(10)) || ' ' || cast(NEW.latitude as varchar(10)) || ')', 8307);
RETURN NEW;
END
$BODY$
LANGUAGE plpgsql;

CREATE TRIGGER make_geom_trigger AFTER INSERT OR UPDATE ON hyd FOR EACH 
ROW EXECUTE PROCEDURE make_geom();


Any ideas?

Cheers




Bruce Rindahl wrote:
> Try:
>
> CREATE or replace FUNCTION make_geom () RETURNS trigger as
> $BODY$
> BEGIN
> NEW.hydgeom = GeometryFromText('POINT (' || cast(NEW.longitude as 
> varchar(10)) || ' ' || cast(NEW.latitude as varchar(10)) || ')', 8307);
> END
> $BODY$
> LANGUAGE plpgsql;
>   
> This will update each row as it is processed.  What you were doing was
> trying to update EVERY row as EACH one was processed.
>
> Bruce Rindahl
>
>
>
>
> -----Original Message-----
> From: postgis-users-bounces at postgis.refractions.net
> [mailto:postgis-users-bounces at postgis.refractions.net] On Behalf Of Willem
> Buitendyk
> Sent: Tuesday, January 22, 2008 2:17 PM
> To: postgis-users at postgis.refractions.net
> Subject: [postgis-users] Trigger Function for Updating Geom
>
> Hi there,
>
> I am trying to figure out how to go about creating a trigger that 
> updates the geom on each insert.  Currently, I am using the following 
> update statement on the table after bulk loading data in:
>
> update temp_hyd set hydgeom = GeometryFromText('POINT (' || 
> cast(longitude as varchar(10)) || ' ' || cast(latitude as varchar(10)) 
> || ')', 8307);
>
> I admit to feeling a little lost as I am only now just starting to 
> migrate GIS data into a server.  So using relational databases are a 
> little new to me (and I don't think Access counts).  I am hoping that only
> updating those newly inserted records will be a whole lot faster then 
> redoing the whole table.
>
> Here is what I have so far:
>
>
> CREATE or replace FUNCTION make_geom () RETURNS trigger as
> $BODY$
> BEGIN
> update hyd set hydgeom = GeometryFromText('POINT (' || cast(longitude as 
> varchar(10)) || ' ' || cast(latitude as varchar(10)) || ')', 8307);
> END
> $BODY$
> LANGUAGE plpgsql;
>
> CREATE TRIGGER make_geom_trigger AFTER INSERT OR UPDATE ON hyd FOR EACH 
> ROW EXECUTE PROCEDURE make_geom();
>
> And of course it doesn't work.  I get the following after doing an 
> insert statement:
>
> ERROR: stack depth limit exceeded
> SQL state: 54001
> Hint: Increase the configuration parameter "max_stack_depth", after 
> ensuring the platform's stack depth limit is adequate.
> Context: SQL statement "update hyd set hydgeom = GeometryFromText('POINT 
> (' || cast(longitude as varchar(10)) || ' ' || cast(latitude as 
> varchar(10)) || ')', 8307)"
>
> Appreciate any help with this,
>
>
> Willem
>
> _______________________________________________
> postgis-users mailing list
> postgis-users at postgis.refractions.net
> http://postgis.refractions.net/mailman/listinfo/postgis-users
>
>
>
> _______________________________________________
> postgis-users mailing list
> postgis-users at postgis.refractions.net
> http://postgis.refractions.net/mailman/listinfo/postgis-users
>
>   




More information about the postgis-users mailing list