[postgis-users] Loop or Cursor
Bob Pawley
rjpawley at shaw.ca
Thu Jul 23 09:15:07 PDT 2009
Leo
Following is the update that I wish to deploy and I have used it as an AFTER INSERT on the parent table. When the object (process_id) has one attrribute (fluid_id) this works well.
With two fluid_id attributes the update lands both attributes on the same geometry.
I don't understand what needs to be done to loop through the fluid_ids using recursive.
update p_id.image
set the_geom =
(select st_translate(graphics.utilities_dgm.the_geom,
st_x(st_centroid(graphics.spatial_ref.line_the_geom)) -
st_x(st_centroid(graphics.utilities_dgm.the_geom)),
st_y(p_id.p_id.three) + graphics.ip_matrix.point_offset -
st_y(st_centroid(graphics.utilities_dgm.the_geom)))
from graphics.utilities_dgm, p_id.processes, p_id.p_id, graphics.spatial_ref, p_id.image, processes_count, graphics.ip_matrix
where graphics.utilities_dgm.utilities_description = 'Text Arrow'
and cast (graphics.utilities_dgm.orientation as integer) = graphics.ip_matrix.text_arrow_orientation
and graphics.ip_matrix.ip_number = p_id.p_id.number_of_ips
and p_id.image.p_id_id = p_id.p_id.p_id_id
and graphics.spatial_ref.description = p_id.image.pid_outline
and p_id.image.description = 'P&ID Outline'
and p_id.p_id.p_id_id = processes_count.p_id_id
and graphics.spatial_ref.orientation = graphics.ip_matrix.text_arrow_orientation
and graphics.ip_matrix.ip_number = p_id.processes.ip_number
and p_id.p_id.p_id_id = processes_count.p_id_id
and graphics.ip_matrix.spatial_ref = p_id.p_id.proc_graphic_position)
from p_id.processes, processes_count
where p_id.processes.p_id_id = processes_count.p_id_id
and p_id.processes.fluid_id = p_id.image.fluid_id
and p_id.image.description = 'ip_op_Arrow_name';
The system I have deployed to establish the position of the process objects is based on a number or processes count using IF statements. I am sure there is a less onerous method but, for the time being it is working without using an AFTER UPDATE. That is, unless AFTER UPDATE is needed to accomplish the recursive operation.
Bob
----- Original Message -----
From: Paragon Corporation
To: 'PostGIS Users Discussion'
Sent: Tuesday, July 21, 2009 11:38 PM
Subject: Re: [postgis-users] Loop or Cursor
Bob,
For this kind of thing -- we usually use a database trigger on the AFTER INSERT row event of the table in question. You would also probably need an AFTER UPDATE trigger as well since as a child object is being updated,
you may want to update the parent if the update condition affects the structure/position of the parent. So in essence you would have a RECURSIVE trigger that keeps on recursing until the final has no parents. Though you'd need to be careful to make sure you don't have cyclical redudancies that could trigger an infinite recursion.
Perhaps if you provided the update statement you are trying to run we could be of more help.
Leo
------------------------------------------------------------------------------
From: postgis-users-bounces at postgis.refractions.net [mailto:postgis-users-bounces at postgis.refractions.net] On Behalf Of Bob Pawley
Sent: Tuesday, July 21, 2009 11:19 AM
To: PostGIS Users Discussion
Subject: Re: [postgis-users] Loop or Cursor
Hi Leo
I'm developing a geometric system as opposed to geographic (basically an engineering drawing).
I have a fixed field, representing a peice of paper, within which the user can add one to four objects.
These object are placed within the field according to the total number of objects.
The first object 'A' is placed in the center and then the user adds lines (one to eight at the moment) as attributes to the object.
When the user adds a second object, I want to update the attributes of object A to satisfy the new placement of object A.
When the user places a third object then both, object A and B, need to be updated.
At the moment, my updates haven't worked as I get either a null or multiple return.
Any suggestions for updating the lines for each object would be greatly appreciated.
Thanks
Bob
----- Original Message -----
From: Paragon Corporation
To: 'PostGIS Users Discussion'
Sent: Monday, July 20, 2009 7:45 PM
Subject: Re: [postgis-users] Loop or Cursor
What kind of operation? Even an update statement might suffice. There are many ways to cleverly control the flow of an update that do not necessitate doing a loop or cursor.
Also keep in mind even within a function used in a SELECT statement of a query, PostgreSQL allows you to run updates and do all sorts of crazy things like launch perl scripts and bash scripts. So for example you can mail to your whole membership simple by doing this
SELECT member_name, send_mail(member_id) As did_it_send
FROM membership
WHERE gross_income > 1000000 and active = true
It is very convenient for making rule processors.
Leo
----------------------------------------------------------------------------
From: postgis-users-bounces at postgis.refractions.net [mailto:postgis-users-bounces at postgis.refractions.net] On Behalf Of Bob Pawley
Sent: Monday, July 20, 2009 1:43 PM
To: PostGIS Users Discussion
Subject: [postgis-users] Loop or Cursor
Hi
I need to access a number of rows, one at a time to perform an operation on each.
Under what conditions would I consider using a loop command, rather than (or with) a cursor?
Bob
----------------------------------------------------------------------------
_______________________________________________
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/postgis-users/attachments/20090723/03663cf0/attachment.html>
More information about the postgis-users
mailing list