본문 바로가기
Web Development/PostgreSQL(PostGIS)

[PostGIS / Error] ST_X(public.geometry) 이름의 함수가 없음

by 감자맹고우 2022. 11. 23.
728x90
반응형

PostGIS로 좌표를 읽어, 데이터를 처리하는 도중 문제가 발생했다.

ERROR 내용은 다음과 같았다.

 

st_x(public.geometry) 이름의 함수가 없음
Hint: 지정된 이름 및 인자 자료형과 일치하는 함수가 없습니다. 명시적 형변환자를 추가해야 할 수도 있습니다.

 

일단 처음에는 Hint대로 명시적 형변환자를 추가해주기로 했다.

 

SELECT
    ST_X(location)::real as lat
    ST_Y(location)::real as lon
FROM
    tb_test
WHERE
    location IS NOT NULL

 

원래는 ::real 없이 쿼리를 작성하였는데, ::라는 postgresql의 형변환 기능을 이용해 real 타입의 명시적 형변환을 해주었다.

하지만 에러는 여전히 동일하게 발생하였다.

 

반응형

 

[ 해결 방법 ]

 

결국 구글링을 해본 결과, postgis의 스키마명을 public에서 현재 스키마로 변경해주지 않아 발생한 문제였다.

그래서 현재 스키마가 public이 아닌데도 이상하게 public.geometry 이름의 함수가 없다며 public 스키마명이 출력되었던 것이다.

 

방법은 ALTER 로 스키마를 변경해주면 되는데,

문제는 PostGIS 2.3부터는 postgis 확장이 더 이상 재배치를 허용하지 않도록 변경되었다는 것이다.

 

그래서 변경 쿼리를 실행하면 다음과 같은 에러 내용이 출력된다.

ERROR: extension "postgis" does not support SET SCHEMA 

 

 

그렇기 때문에, 먼저 postgis extension이 재배치를 허용하도록 설정을 변경해준 후에, 다시 스키마명을 변경해주면 문제가 해결된다!

 

-- postgis 재배치 허용
UPDATE 
    pg_extension
SET 
    extrelocatable = true
WHERE 
    extname = 'postgis';

-- postgis 스키마 변경
ALTER EXTENSION
    postgis
SET SCHEMA
    "test" --변경할 스키마명

 

 

< 참고 문서 >

문제를 쉽게 해결할 수 있도록 공유해주신, Regina Obe님 감사합니다.

 

Move PostGIS extension to a different schema

As of PostGIS 2.3, the postgis extension was changed to no longer allow relocation. All function calls within the extension are now schema qualified. While this …

postgis.net

 

🤞 도움이 되셨기를 바랍니다. 한 번의 클릭과 댓글은 어딘가의 누군가에게 진실로 큰 힘이 됩니다. 🐱‍🏍

 

728x90
반응형

댓글