SQL 텍스트가 매개 변수로 필요한 C 함수와 함께 사용되는 명령문이있는 PostgreSQL

StackOverflow https://stackoverflow.com//questions/21001822

문제

PostgreSQL에서 문을 사용하여 다음 쿼리를 만들려고합니다.

WITH catchment AS (
                SELECT *  FROM  ..   -- Some time consuming join statement
     ),
     catchment10 AS (
                SELECT * FROM pgr_pointsaspolygon('SELECT * FROM catchment where cost < 10000')
     ),
     catchment20 AS (
                SELECT * FROM pgr_pointsaspolygon('SELECT * FROM catchment where cost < 20000')
     ),
     catchment30 AS (
                SELECT * FROM pgr_pointsaspolygon('SELECT * FROM catchment where cost < 30000')
     )
SELECT * FROM  catchment10
UNION
SELECT * FROM  catchment20
UNION
SELECT * FROM  catchment30
.

PGR_PIR_PIRPOINTSASPLYGON () 함수는 PGR_ALPHASHAPE () 함수를 호출한다는 것입니다.

CREATE OR REPLACE FUNCTION pgr_alphashape(IN sql text, OUT x double precision, OUT y double precision)
  RETURNS SETOF record AS
'$libdir/librouting_dd', 'alphashape'
  LANGUAGE c IMMUTABLE STRICT
  COST 1
  ROWS 1000;
ALTER FUNCTION pgr_alphashape(text)
  OWNER TO postgres;
.

pgr_alphashape는 작동하도록 SQL 문이 필요하지만 WITH 절에서 인수 테이블을 전달할 때 다음 오류가 발생합니다.

      ERROR:  relation "catchment" does not exist
.

이 오류를 수정하여 집수 테이블이 3 번 계산되지 않고 pgr_pointsaspolygon 함수로 전달할 수 있도록이 오류를 수정하는 다른 방법이 있습니까?

도움이 되었습니까?

해결책

타사에서 제공하는 기능으로 분명히 작동하기 때문에 유일한 옵션은 임시 테이블입니다. relinsetodicetagcode CREATE TABLE AS를 사용하여 여러 호출과의 충돌을 피하기 위해세션.

BEGIN;
CREATE TEMP TABLE catchment ON COMMIT DROP AS
SELECT *  FROM  ..   -- Some time consuming join statement
;

SELECT * FROM pgr_pointsaspolygon('SELECT * FROM catchment WHERE cost < 10000')
UNION ALL  -- Presuming we do not want to eliminate dupes?
SELECT * FROM pgr_pointsaspolygon('SELECT * FROM catchment WHERE cost < 20000')
UNION ALL
SELECT * FROM pgr_pointsaspolygon('SELECT * FROM catchment WHERE cost < 30000')
COMMIT;
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top