현상
Tibero to Postgresql DBLink 사용 시 실제로 존재하는 테이블 조회할 경우 테이블이 존재하지 않는다고 출력되는 TBR-12126 오류 현상이 발생하였습니다.
아래 예시 코드와 같이 Postgresql 에서 테이블 생성 후 Tibero에서 해당 테이블을 조회하면, 에러코드가 출력됩니다.
Postgresql에서 테이블 생성
create table test (c1 int);
insert into test values(1);
SQL
복사
Tibero에서 해당 테이블 조회 시 에러코드 출력
SQL> select * from test@pgnew;
TBR-12126: Remote database client API error - Explicit prepare failed. - ERROR: relation "TEST" does not exist
Position: 37
TBR-130097:Explicit prepare failed. - ERROR: relation "TEST" does not exist
Position: 37
SQL
복사
원인
Tibero는 기본적으로 테이블과 칼럼 이름을 다 `대문자`로 변경하고, Postgresql 은 기본적으로 테이블과 칼럼 이름 전체를 `소문자`로 변경하여 해당 오류 현상이 발생하였습니다.
해결
Postgresql 에서 테이블명 소문자로 테이블 생성 시
Postgressql에서 생성한 테이블은 소문자로 생성 되므로, Tibero에서 해당 테이블 조회 시 Double quotes (””, 쌍따옴표)으로 감싸서 조회해야 합니다.
prosyncmanager=> create table test (c1 int);
CREATE TABLE
prosyncmanager=> insert into test values(1);
INSERT 0 1
SQL
복사
Tibero에서 조회
SQL> select * from "test"@pgnew;
c1
----------
1
1 row selected.
SQL
복사
Postgresql 에서 테이블명 대문자로 테이블 생성 시
만약 Postgresql에서 생성한 테이블이 대문자라면 Tibero에서 조회 시 Double quotes(””, 쌍따옴표)으로 감싸지 않아도 됩니다.
prosyncmanager=> create table "TEST3" (c1 int);
CREATE TABLE
prosyncmanager=> insert into "TEST3" values (3);
INSERT 0 1
prosyncmanager=> select * from "TEST3";
c1
----
3
(1 row)
SQL
복사
Tibero에서 조회
SQL> select * from test3@pgnew;
c1
----------
3
SQL
복사
테이블명 대소문자 적용에 따른 출력값 비교
1) 테이블 명이 소문자 일 때, 출력값 비교
Postgresql
prosyncmanager=> select * from test;
c1
----
1
(1 row)
SQL
복사
Tibero
SQL> select * from "test"@pgnew;
c1
----------
1
1 row selected.
SQL
복사
2) 테이블 명에 대소문자 섞여있을 때, 출력값 비교
Postgresql
prosyncmanager=> select * from "Test2";
c1
----
2
(1 row)
SQL
복사
Tibero
SQL> select * from "Test2"@pgnew;
c1
----------
2
1 row selected.
SQL
복사
3) 테이블 명이 대문자 일 때, 출력값 비교
Postgresql
prosyncmanager=> select * from "TEST3";
c1
----
3
(1 row)
SQL
복사
Tibero
SQL> select * from test3@pgnew;
c1
----------
3
1 row selected.
SQL
복사