[postgis-users] Delete locks temp table

Darafei "Komяpa" Praliaskouski me at komzpa.net
Wed Jun 6 03:25:36 PDT 2018


Hello,

Simplest is to move DROP TABLE from start to end of functions.

Please have a look at this gist changes:
https://gist.github.com/Komzpa/38b66ee31b14542670529e5c8614f07c/revisions

ср, 6 июн. 2018 г. в 13:07, Paulo Pires <paulopires16 at gmail.com>:

> Thanks  Darafei,
>
> See the whole process. Do you mean make just one function?
>
>             CREATE OR REPLACE FUNCTION is_internal(polygon geometry, p2
> geometry, p3 geometry)
>             RETURNS boolean as
>             $$
>                 BEGIN
>                     return st_contains(polygon, st_makeline(p2, p3));
>                 END
>             $$ language plpgsql;
>
>
>             CREATE OR REPLACE FUNCTION angle(p1 geometry, p2 geometry, p3
> geometry)
>             RETURNS float AS
>             $$
>                 DECLARE
>                     p12 float;
>                     p23 float;
>                     p13 float;
>                 BEGIN
>                 select st_distance(p1, p2) into p12;
>                     select st_distance(p1, p3) into p13;
>                     select st_distance(p2, p3) into p23;
>                     return acos(  (p12^2 + p13^2 - p23^2) / (2*p12*p13) );
>                 END
>             $$ language plpgsql;
>
>
>             CREATE OR REPLACE FUNCTION internal_angle(polygon geometry, p1
> geometry, p2 geometry, p3 geometry)
>             RETURNS float as
>             $$
>                 DECLARE
>                     ang float;
>                     is_intern boolean;
>                 BEGIN
>                     select temp.angle(p1, p2, p3) into ang;
>                     select temp.is_internal(polygon, p2, p3) into
> is_intern;
>                     return ang;
>                 END
>             $$ language plpgsql;
>
>
>             CREATE OR REPLACE FUNCTION corner_triplets(geom geometry)
>             RETURNS table(corner_number integer, p1 geometry, p2 geometry,
> p3 geometry) AS
>             $$
>                 DECLARE
>                     max_corner_number integer;
>                 BEGIN
>                     DROP TABLE IF EXISTS corners;
>                     create temp table corners on commit drop as select
> path[2] as corner_number, t1.geom as point from (select
> (st_dumppoints($1)).*) as t1 where path[1] = 1;
>                     select max(corners.corner_number) into
> max_corner_number from corners;
>                     insert into corners (corner_number, point) select 0,
> point from corners where corners.corner_number = max_corner_number - 1;
>
>                 DROP TABLE IF EXISTS triplets;
>                     create temp table triplets on commit drop as select
> t1.corner_number, t1.point as p1, t2.point as p2,  t3.point as p3 from
> corners as t1, corners as t2, corners as t3 where t1.corner_number =
> t2.corner_number + 1 and t1.corner_number = t3.corner_number - 1;
>                     return QUERY TABLE triplets;
>                 END;
>             $$
>             LANGUAGE plpgsql;
>
>
>             CREATE OR REPLACE FUNCTION internal_angles(geom geometry)
>             RETURNS table(corner geometry, angle float)
>             AS $$
>                 BEGIN
>                     DROP TABLE IF EXISTS internal_angs;
>                     create temp table internal_angs on commit drop as
> select p1, internal_angle(geom, p1, p2, p3) from (select (c).* from (select
> corner_triplets(geom) as c) as t1) as t2;
>                     return QUERY TABLE internal_angs;
>                 END;
>             $$
>             LANGUAGE plpgsql;
>
>             DROP TABLE IF EXISTS allradians;
>             select (c).* into allradians from (select
> internal_angles(geom) as c from mytable) as t;
> _______________________________________________
> postgis-users mailing list
> postgis-users at lists.osgeo.org
> https://lists.osgeo.org/mailman/listinfo/postgis-users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/postgis-users/attachments/20180606/f6b84dd6/attachment.html>


More information about the postgis-users mailing list