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님 감사합니다.
🤞 도움이 되셨기를 바랍니다. 한 번의 클릭과 댓글은 어딘가의 누군가에게 진실로 큰 힘이 됩니다. 🐱🏍
728x90
반응형
'Web Development > PostgreSQL(PostGIS)' 카테고리의 다른 글
[PostgreSQL / Java] PostGIS Geometry타입의 Point(점) 좌표 SELECT, UPDATE 쿼리(feat. Geometry의 VO타입 설정) (0) | 2022.03.03 |
---|
댓글