[SQL script] Unterminated dollar quote $$ 오류 스프링 설정으로 해결하기

2021. 9. 14. 17:40·디버깅∕오류해결
728x90

Spring Boot 프로젝트 중, schema.sql 과 data.sql 에 function(procedure) 를 기입했더니 다음과 같은 PSQLException 이 발생하며 제대로 동작하지 않았다.

👾 오류메세지 👾

Caused by: org.postgresql.util.PSQLException: Unterminated dollar quote started at position 95 in SQL CREATE OR REPLACE FUNCTION public.create_schema() RETURNS trigger LANGUAGE 'plpgsql' AS $BODY$ DECLARE msg varchar(100). Expected terminating $$


오류 내용을 확인해보면 함수 내부에 쓰인 $$ 달러 쿼트 가 종료되지 않았다고 하는데 나는 분명히 종료해줬고, pgAdmin 에서는 같은 함수 쿼리문으로 생성만 잘 되길래 도대체 어디서 문제가 생긴건지 찾기가 어려웠다.

구글링해서 알아보니, Spring 에서 sql 파일을 초기화할때 구분자가 기본으로 세미콜론(;)으로 되어있는데, 달러구분자 뒤의 세미콜론을 종료로 인식하지 못하고 계속 이어지는 것으로 판단하는 것 같았다.

그래서 좀 더 확실하게 종료처리를 알려주기 위해서 spring 설정파일에서 구분 separator 를 변경해주고, sql 파일에도 적용해주었더니 잘 작동했다.

1. application.properties 혹은 yml 에 구분자를 새로 지정해준다. (기본으로 세미콜론)

spring.sql.init.separator={원하는 구분자}
spring.sql.init.separator=;;

세미콜론 두개로 바꿔주었다. 원하는 다른 걸로 바꿔도 무관하다.

property 이름은 Spring Boot 버전에 따라 차이가 있는 것 같다.
최신 버전은 위 속성명으로 지정해주면 되고 적용이 안되는 예전 버전은 아래 속성으로 지정해주면 된다.

spring.datasource.separator={원하는 구분자}
spring.datasource.separator=;;

2. 해당 함수 달러구분자 뒤에 위에서 작성했던 구분자로 종료되었음을 알려준다.

기존 : $BODY$;
변경 : $BODY$;;

참고로 다른 부분은 변경하지 않아도 된다. 기존에 세미콜론으로 종료한 일반 쿼리문들을 모두 바꾼 세미콜론 두개로 바꿔줘야하나 했는데, 위의 경우처럼 $$ 달러 $$ 를 사용한 함수에 마지막에만 적용해줬더니 오류 없이 잘 작동했다.


참고 :
stackoverflow
spring.sql.init.separator
https://docs.spring.io/spring-boot/docs/1.1.1.RELEASE/

728x90
저작자표시 비영리 동일조건 (새창열림)

'디버깅∕오류해결' 카테고리의 다른 글

[IntelliJ] 프로젝트 import 구문 에러 발생할 경우, 해결 방법  (0) 2024.05.20
Address already in use: JVM_Bind  (0) 2022.04.03
[Spring Boot] org.springframework.beans.factory.BeanCreationException  (4) 2021.09.03
[Spring Boot] To display the conditions report re-run your application with 'debug' enabled  (2) 2021.09.02
[JUnit 5] org.junit.platform.launcher.core.EngineDiscoveryOrchestrator  (0) 2021.09.02
'디버깅∕오류해결' 카테고리의 다른 글
  • [IntelliJ] 프로젝트 import 구문 에러 발생할 경우, 해결 방법
  • Address already in use: JVM_Bind
  • [Spring Boot] org.springframework.beans.factory.BeanCreationException
  • [Spring Boot] To display the conditions report re-run your application with 'debug' enabled
heestory217
heestory217
Done is better than Perfect! 좌충우돌 개발일지💻
    250x250
  • heestory217
    Heello World
    heestory217
  • 전체
    오늘
    어제
    • 분류 전체보기 (120)
      • 컴퓨터일반 (0)
      • WEB (1)
      • JAVA (3)
      • Python (9)
      • C (1)
      • DataBase (17)
        • Oracle (2)
        • MySQL (9)
        • SAP HANA (4)
        • PostgreSQL (0)
      • 디버깅∕오류해결 (14)
      • 코딩테스트 (54)
        • 자료구조∕알고리즘 (3)
      • 정보처리기사 (10)
      • Git∕GitHub (7)
      • 기타 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    정처기 실기
    인텔리제이
    hashmap sort
    leetcode
    프로그래머스 카카오
    treemap
    Sort a HashMap in Java
    SAP HANA Studio
    treeset
    HashMap
    코딩테스트
    정처기 수제비 실기문제
    배열 정렬하기
    Guava library
    IntelliJ
    파이썬 포맷팅
    정처기 수제비 데일리 문제
    정처기 수제비
    MySQL
    정처기 실기 예상문제
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
heestory217
[SQL script] Unterminated dollar quote $$ 오류 스프링 설정으로 해결하기
상단으로

티스토리툴바