postgresql에서 fdw를 사용한 oracle db연결 에러 0 4 4,172

by jjamong [Oracle 에러코드] [2024.07.03 14:38:54]


fdw를 사용해 oracle에 있는 데이터베이스를 postgres로 연결했습니다.
그런데 몇몇 쿼리들에 대해 인코딩 오류가 나네요.

select *
from fdw_table
where  (EDITDATE Between '2024-05-01' And '2024-05-03');

위와 같은 쿼리를 조회하면 Detail: ORA-29275: partial multibyte character 에러가 발생합니다.
 

그런데, 동일한 조건으로

select id
from fdw_table
where  (EDITDATE Between '2024-05-01' And '2024-05-03');

를 조회하고, 조회 결과인 id들을 모아서

select *
from fdw_table
where id in (1,2,3,4,5);

와 같은 형태로 조회하면 오류가 발생하지 않습니다.

fdw_table에서 "NAME"이라는 컬럼을 포함하였을 때만 오류가 발생하며,
"NAME"을 제외한 다른 컬럼들을 나열하여 select 하였을 땐 아무 문제도 발생하지 않습니다.

추가로, 
 

select * 
from fdw_table as a
inner join
(select id
from fdw_table
where  (EDITDATE Between '2024-05-01' And '2024-05-03') ) as b
on a.id = b.id;

와 같은 형태로 조회를 해도 마찬가지로
  Detail: ORA-29275: partial multibyte character 오류가 발생합니다.
 

검색해보니 NLS 설정을 바꿔야 한다는 답변이 있어 설정을 수정해보았는데도 동일한 현상이 발생하는데,

이 에러를 해결 할 방법이 있을까요?

by 우주민 [2024.07.03 14:58:38]

혹시 db 간 캐릭터셋이 동일한지 확인이 가능하실까요?

경험상 이종 db 간에 이런 이유로 간혹 저런 문제가 있긴 했거든요.


by jjamong [2024.07.03 15:16:18]

oracle은 varchar2고 postgres에서는 varchar와 text 형식으로 둘다 시도해 보았는데 같은 오류가 발생했습니다.


by 우주민 [2024.07.03 15:45:39]

ORA : SELECT * FROM nls_database_parameters WHERE parameter = 'NLS_CHARACTERSET'

POS : SELECT pg_encoding_to_char(encoding) FROM pg_database 

해당 쿼리 돌려서 캐릭터셋 확인해보시면 될듯 합니다


by 포카리스웨트 [2024.07.09 08:49:17]

select * from fdw_table where length(name) != lengthb(name);

캐릭터셋이 동일한데도 오류가 발생한다면 해당 쿼리로 문자열 길이와 바이트 길이가 다른지 비교해서 name 컬럼 안에 들어있는 값의 멀티바이트 문자가 제대로 인코딩되어 있는지 확인해 보세요

인코딩되어 있지 않다면 to_single_byte 함수로 select 문 사용하거나 데이터 값을 변경하시면 될 것 같습니다

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입