database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 9835 게시물 읽기
No. 9835
oracle_fdw 사용 시 create foreign table단계에서 pk지정이 불가능한가요?
작성자
postgres
작성일
2017-05-31 15:11
조회수
7,680

 postgre에서 oracle_fdw를 이용하여 오라클 서버의 data를 foreign table로 조회하고 이 foreign table에 대하여 DML test를 하고 있습니다.

 

1. 먼저 oracle 서버에 LJH 스키마에 있는 ic_process_tbl 테이블입니다. 최대한 간단하게 만들었습니다.

CREATE TABLE ic_process_tbl

(
  cycl character varying(10) NOT NULL,
  proc_code character varying(10) NOT NULL,
  proc_name character varying(100)
  CONSTRAINT ic_process_tbl_pkey PRIMARY KEY (cycl)
);
 
INSERT INTO ic_process_tbl VALUES ('200501', 'P000001', '프로세스');
INSERT INTO ic_process_tbl VALUES ('200501', 'P010000', '1. 전사수준');
INSERT INTO ic_process_tbl VALUES ('200501', 'P020000', '2. 매출');
=> 이런식으로 만들어서 data를 insert 해 놓았습니다.
 
2. 위의 오라클 서버의 테이블을 postgre에서 oracle_fdw를 이용하여 foreign 테이블로 조회합니다.
 
create extension oracle_fdw;
create server ora foreign data wrapper oracle_fdw options (dbserver '//보안상 ip는 지우겠습니다./ORCL');
create user mapping for ljh server ora options (user 'LJH', password '보안상 비번은 지우겠습니다');
 
이제 foreign 테이블을 생성해주는데 여기서 에러가 발생합니다.
 
ljh=# create foreign table ic_process

ljh-# (cycl character varying(10) NOT NULL primary key,

ljh(# proc_code character varying NOT NULL,

ljh(# proc_name character varying(100))

ljh-# server ora options (schema 'LJH', table 'IC_PROCESS_TBL');

 
이렇게 생성하려 하면 
ERROR:  primary key constraints are not supported on foreign tables

LINE 2: (cycl character varying(10) NOT NULL primary key,

 
이렇게  에러가 발생하는데, 보면 foreign 테이블에선 primary key를 지원하지 않는다고 합니다..
LINE 2에서 primary key를 지우고 foreign 테이블을 생성하면 생성이 됩니다. 하지만 pk설정이 꼭 필요한 이유가
 
저 테이블에 대해 DML 테스트를 해야하는데 pk 없이 insert는 가능하지만 update나 delete는 pk없이 불가능하기 때문입니다..
 
해결방법을 계속 찾고있는데 고수분의 의견을 여쭙고자 합니다
 
 
 
이 글에 대한 댓글이 총 3건 있습니다.

FDW의 개념을 먼저 파악하셔야 할듯합니다.

 

외부 테이블의 메타정보만 생성하여 외부테이블에 접근하는 것이라고 이해하면 됩니다.

 

오라클쪽에 PK가 있으면 되고 PostgreSQL에는 PK를 만드는 것이 아닙니다.

김주왕(kimjuking)님이 2017-05-31 15:34에 작성한 댓글입니다.

답변 감사합니다.

현재 oracle 테이블에 cycl 컬럼이 pk로 지정되어 있는데,

postgre에서 그럼 foreign 테이블로 접근하여 insert는 가능한데

update나 delete를 하려하면 왜 에러가 나면서

최소 1나 이상의 pk가 필요하다고 하는건가요?

ljh=# UPDATE ic_process SET proc_name = '2. 매출수정' where proc_code = 'P020000';

ERROR:  no primary key column specified for foreign Oracle table
DETAIL:  For UPDATE or DELETE, at least one foreign table column must be marked as primary key column.
HINT:  Set the option "key" on the columns that belong to the primary key.
 
insert는 문제 없는데 update를 하려 하면 이런 에러가 발생하거든요
postgres님이 2017-05-31 15:36에 작성한 댓글입니다.
이 댓글은 2017-05-31 15:39에 마지막으로 수정되었습니다. Edit

찾아보니 postgres_fdw와는 약간 다르네요

 

메뉴얼 보시면

 

For UPDATE and DELETE to work, the columns corresponding to the primary key columns of the Oracle table must have the key column option set. These columns are used to identify a foreign table row, so make sure that the option is set on all columns that belong to the primary key.

 

key옵션을 사용하면 된다고 나와있습니다.

 

메뉴얼을 참조하여 수행해보시고 공유해주시면 좋을듯합니다.

김주왕(kimjuking)님이 2017-05-31 15:45에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
9840alter table add constraint foreign key 관련 질문 드립니다.. [2]
전성용
2017-06-08
7062
9839postgresql-xl 데이터베이스 질문 [3]
전성용
2017-06-07
7013
9838pg_dump관련 질문 [1]
postgres
2017-06-02
7181
9835oracle_fdw 사용 시 create foreign table단계에서 pk지정이 불가능한가요? [3]
postgres
2017-05-31
7680
9834oracle과 postgres table의 pk에 대하여 기초질문 [1]
이재훈
2017-05-31
7015
9833postgre 언어셋 관련 [2]
postgres
2017-05-30
7574
9832postgreSQL 함수 관련 질문 [5]
postgres
2017-05-26
7480
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.049초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다