Oracle 12c 에서 원래 데이터타입 'Long' 으로 사용하고 있다, Oracle 의 다른 버전들도 함께 사용해야 한다는 사실을 알게 되었다.

data type 'Long'을 'Clob'로 바꾸는 도중, 아래와 같은 에러를 만났다.

 

확인해 보니 insert 하려는 row들은 1000개가 넘어있었고, 

Mybatis 상 select-insert 중에 해당 에러가 발생하였다.

'clob'는 4GB까지 저장이 가능하지만, mybatis에 바인딩 시, 4000 bytes 가 넘으면 잘라서 저장해줘야 한다는 것...

 

rdbms를 오라클만 사용하는 게 아니라서 결국 공식문서를 뒤져보기로 했다 ,

확인해 보니

https://mybatis.org/mybatis-3/ko/configuration.html#typeHandlers 

 

mybatis – 마이바티스 3 | 매퍼 설정

매퍼 설정 마이바티스 XML 설정파일은 다양한 설정과 프로퍼티를 가진다. 문서의 구조는 다음과 같다.: configuration properties 이 설정은 외부에 옮길 수 있다. 자바 프로퍼티 파일 인스턴스에 설정할

mybatis.org

 

 

아래와 같은 샘플코드를 이용하여 작성하니 성공!

  <insert id="insert2">
      insert into users2 (id, name, funkyNumber, roundingMode) values (
        #{id}, #{name}, #{funkyNumber}, #{roundingMode, typeHandler=org.apache.ibatis.type.ClobTypeHandler}
      )
  </insert>

 

아래의 공식을 확인 후, 필요한 타입핸들러를 작성하면 된다 !

https://mybatis.org/mybatis-3/ko/configuration.html#typeHandlers

 

mybatis – 마이바티스 3 | 매퍼 설정

매퍼 설정 마이바티스 XML 설정파일은 다양한 설정과 프로퍼티를 가진다. 문서의 구조는 다음과 같다.: configuration properties 이 설정은 외부에 옮길 수 있다. 자바 프로퍼티 파일 인스턴스에 설정할

mybatis.org

 

 

. 동작중인 컨테이너 확인

$ docker ps

. 정지된 컨테이너 확인

$ docker ps -a

. 컨테이너 삭제 (정지된 컨테이너일 경우)

$ docker rm 컨테이너ID

. 컨테이너 삭제 (정지 상관 없이)

$ docker rm -f 컨테이너ID

. 컨테이너 복수 삭제

$ docker rm 'docker ps -a -q'

. 컨테이너 모두 삭제 (정지된 컨테이너 일 경우)

$ docker container prune

 


 

. 볼륨 생성

$ docker volume create 볼륨명

. 볼륨 모두 삭제

$ docker volume prune

. 특정 볼륨 삭제

$ docker volume rm 볼륨명

. 전체 볼륨 확인

$ docker volume ls

 

DB 마다 달라서 ..

전에 My SQL 로 작업할 때는 이렇게 안했던거 같은뎁 .. 

여튼 기록해 놓으려고 한다 !

 

1. 방화벽 열기

윈도우 검색에 방화벽만 검색해도 나온다

 

'방화벽 상태 확인' 선택 하면 아래와 같은 화면이 나오는데 여기에서

'고급 설정' 선택하기

 

'인바운드 규칙' 선택 후 '새규칙' 선택

 

나는 db 포트를 열 것이기 때문에 포트 선택 후 특정 포트를 입력해주었다.

그 후 다른 설정은 그대로 두고 다음 버튼을 눌렀다.

 

마지막 이름작성 화면에서 나중에 컨트롤 할 수 있게 기억할 수 있는 이름으로 등록해주었다.

그런 뒤 '마침'

 

이런 식으로 '인바운드 규칙' 목록에서 확인할 수 있다.

 

2. 그런 뒤, postgreSQL 의 설정을 수정해주어야한다 ..

경로는 postgreSQL이 설치된 폴더의 data까지 이동한다.

그런 뒤, 'pg_hba.conf' 파일을 찾는다.

 

3. 아래의 코드를 밑에 이미지와 같이 추가해준다.

host    all             all             0.0.0.0/0            scram-sha-256

 

왜 0.0.0.0/0 으로 하냐?

모든 IPv4 address에서 사용하고 싶기 때문이다 .. 

만약 다른 옵션을 확인하고 싶으면 아래에 더 설명이 잘되어있다.

https://stackoverflow.com/questions/3278379/how-to-configure-postgresql-to-accept-all-incoming-connections

 

How to configure PostgreSQL to accept all incoming connections

I've got a PostgreSQL data base that I'd like to configure to accept all incoming connections regardless of the source IP address. How can this be configured in the pg_hba.conf file? I'm using post...

stackoverflow.com

 

3. 그리고 마지막 관문 !!

'서비스' 에 들어가서 'postgresql-' 로 시작하는 서비스를 찾는다. 

 

마우스 오른쪽 버튼을 클릭 후 '다시시작' 을 클릭한다.

 

4. DBeaver 에서 확인해보면 성공 !!!!

(내가 사용하는 DB 관리 툴이 DBeaver 이다.. 각자 사용하는 툴로 확인해보면 아마 성공 ..?)

Host는 외부에서 붙을 본인의 ip주소를 입력하고, port 는 방금 열었던 방화벽의 포트를 입력해준다 .. 

끝 !!

 

( 아, 같은 망에서만 가능한 방법이다 ..)

'sql > postgresql' 카테고리의 다른 글

[Postgresql] 속도가 느려지는 function .. 기록  (0) 2022.03.20

같은 화면인데 아래에 있는 화면은 목록을 눌러서 조회했을때, 속도가 1.63s

 

해당 화면에 조회버튼을 눌렀을 때 (캐시가 있는 상태), 588ms

이게 무슨 일이야.. 싶어 

로그를 찍어 WinMerge를 해주었다.

그랬더니 차이나는 부분은 이것,,

(목록을 클릭해서 나오는 log)

WHERE 날짜 >= COALESCE(NULL, TO_CHAR(NOW() - interval '1 months', 'YYYY-mm-dd')
  AND 날짜 <= COALESCE(NULL, TO_CHAR(NOW(), 'YYYY-mm-dd')

 

(캐시가 남아있는 상태에서 조회 버튼 클릭했을때 log)

WHERE 날짜 >= COALESCE('2022-02-17', TO_CHAR(NOW() - interval '1 months', 'YYYY-mm-dd')
  AND 날짜 <= COALESCE('2022-03-17', TO_CHAR(NOW(), 'YYYY-mm-dd')

 

아차 싶었다.

프론트에서 처음 조회할 때, 스크립트로 오늘부터 1달 이전~오늘 날짜까지 

날짜 <![CDATA[>=]]> COALESCE(#{선택한 시작 날짜}, to_char(now()- interval '1 months', 'YYYY-mm-dd'))
						 AND occrrnc_de <![CDATA[<=]]> COALESCE(#{선택한 종료 날짜}, to_char(now(), 'YYYY-mm-dd')

 

그래서,,

해당 쿼리를 db관리도구인 DBeaver에서 COALESCE(null, to_char(날짜))실행시켜봤더니 아이디와 조회수만 가져오는데 677ms가 걸렸다.

 

그리고 COALESCE null이 아니라 옳은 날짜가 들어간 상태에서 실행을 해보니 180ms ..

데이터를 파싱해주는 to_char이라는 함수가 좀 느리다는 말을 듣기는 했지만.. 약 5배정도 걸렸다 .. 

 

그리고 혹시나 싶어 COALESCE함수를 제거해봤더니..

16ms ... 조금 배신당한 기분이랄까.....

ㅎㅎㅎ

여튼 이렇게 하나 또 알고 간다.

페이징 로딩 속도를 배이상 줄여서 솔직히 좀 즐겁다 히히

 

페이징 데이터 실행 속도를 줄이려면 자바 단 보다는 쿼리부터 수정하고 그다음에 소스코드를 수정해야겠다..

소스코드만 수정했는데도 이렇게 빨라질수가. ..

'sql > postgresql' 카테고리의 다른 글

[Postgresql] 같은 망일 때, 외부 접속 허용 설정하기  (0) 2022.03.29

+ Recent posts