카테고리 없음

Oracle PostgreSQL 변환시 차이점

kkumtree 2024. 3. 12. 14:46

기존에 현재 회사의 솔루션을 도입하여 사용하던 곳이 온프레미스를 클라우드로 변경 및 고도화하는 프로젝트에 투입되었다.

 

그 중 DB를 오라클에서 postgre로 변경하는 작업을 진행하고 있는데

 

누군가 오라클과 Postgre는 거의 동일하다고 해서 철썩같이 믿고 있었건만

 

직접 작업하면서 보니 다른점 투성이다.

 

 

다른점)

가장 큰 부분으로는 묵시적 형변환을 지원하지 않는 것이 제일 꼴받는 포인트다.

 

14버전을 사용하고 있는데 이보다 전 버전에서는 묵시적 형변환을 허용해주는 옵션이 존재했던것 같다.

 

1. sysdate > now()

 

2. to_number()는 format을 지정해줘야하는 옵션이 필요

오라클)

select to_number( TO_CHAR(sysdate, 'yyyymmdd') || '1000') FROM dual;

postgre)

select to_number( TO_CHAR(now(), 'yyyymmdd') || '1000', '999999999999');

 

3. substr() > substring()

해당 함수는 심지어 varchar형이 아니면 오류를 뱉어낸다.

그래서

TO_NUMBER(substring(MAX(SCHD_ID)::varchar, 0, 8)||TO_NUMBER(substring(MAX(SCHD_ID)::varchar, 9),'999999999')+1, '999999999999')

처럼 ::varchar를 붙이거나 cast(max(schd_id) as varchar)로 기입해줘야한다.

 

4. nvl() > coalesce()

 

5. 계층형쿼리

start with > WITH RECURSIVE ~~ as ()

 

6. rownum > row_number() over()

 

7. 서브쿼리 사용시 alias필수

 

 

 

99. 날짜 비교

interval 사용.

select * from SCHD_HTML where to_date(schd_id::varchar, 'YYYYMMDDhh24miss') >= now() - interval '90 days';