Q&A

  • primary key의 필드 순서들을 바꾸거나 삭제하려고 하는데 안되네요
Firebird에서 여러 필드를 묶어서 primary key로 지정하였습니다.
그런데 key의 필드 순서를 바꾸고자 시도하였는데 안되네요.

우선 현재 생성되 있는 테이블은 다음과 같습니다.
<!--CodeS-->
/******************************************************************************/
/****                                Tables                                ****/
/******************************************************************************/



CREATE TABLE FUTURES (
   CLOSETIME   TIMESTAMP NOT NULL,
   EXPIRY      INTEGER NOT NULL,
   OPENPRICE   DECIMAL(15,2),
   HIGHPRICE   DECIMAL(15,2),
   LOWPRICE    DECIMAL(15,2),
   CLOSEPRICE  DECIMAL(15,2),
   VOLUME      INTEGER
);

/******************************************************************************/
/****                             Primary Keys                             ****/
/******************************************************************************/

ALTER TABLE FUTURES ADD CONSTRAINT PK_FUTURES PRIMARY KEY (EXPIRY, CLOSETIME);
<!--CodeE-->



처음엔 expiry가 앞에 있었고 closetime이 두번째 필드였는데 필드의 순서는 바꿀 수 있더라구요.
그런데, primary key에서 필드의 순서를 바꿔보고자 'alter table futures drop constraint PK_FUTURES'라고 실행해 봤더니 아래와 같은 오류메시지가 나왔습니다.

<!--CodeS-->
This operation is not defined for system tables.
unsuccessful metadata update.
CONSTRAINT PK_FUTURES does not exist.
<!--CodeE-->

메시지를 보아하니 메타데이타베이스에 있는 프라이머리 키를 지울 수 없다는 거 같은데..쩝....이래서 프라이머리키로 안잡고 걍 unique constraint만 줄까 했었는데 역시 속을 썩이네요..

혹시나, 자동으로 생성된 인덱스 때문에 지워지지 않나하고 지워보려고 했지만, 인터베이스 메뉴얼에서 설명하기도 unique, primary key, foreign key에 의해 생성된 인덱스는 drop index 명령으로 지울 수 없다고도 하고 실제 해봐도 역시 지워지지 않고.

....

혹시나 해서, 임의의 테이블을 만들어 보고 거기에 CONSTRAINT를 PRIMARY KEY가 아니라 UNIQUE로 해서 인덱스를 만들어 봤더니 그건 ALTER TABLE.. DROP 구문으로 잘 지워지더군요.

PRIMARY KEY에서 필드의 순서를 바꿀 수 있을까요? 없다면, 아예 PRIMARY KEY CONSTRAINT를 없애는 방법 없을까요? 대신, UNIQUE CONSTRAINT로 바꾸고 싶은데 아시는 분 있으시면 도움 부탁드립니다. 또는, 이 작업은 절대 불가능한 작업이라는 답변도 좋습니다. 그러면 빨리 포기하고 테이블 날린 후에 마음 비우고 데이타 제입력 시키면 되니까요. ㅠㅠ 물론 데이타 재입력이 7시간 걸리니까 오늘도 프로그래밍은 못하고 데이타만 갖고 고생하겠네여. 흑흑...
8  COMMENTS