Oracle PostgreSQL 변환시 차이점
기존에 현재 회사의 솔루션을 도입하여 사용하던 곳이 온프레미스를 클라우드로 변경 및 고도화하는 프로젝트에 투입되었다.
그 중 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';