2012-10-29 1 views
1

nullable이 아닌 열을 Netezza에서 nullable로 변경할 수있는 방법이 있습니까? (아니면 테이블에 새로운 nullable 열을 만들고, 데이터를 전송하고, 이전 열을 삭제해야합니까?)Netezza에서 NOT NULL 제약 조건을 NULL로 변경하십시오.

죄송합니다. Google 검색 결과가 표시되면 미안하지만, t는 무엇인가 발견 할 수 있었다.

답변

3

NZ 6.0에서는 열 자체를 추가/삭제하거나, 기본값을 설정하거나 지우거나, varchar의 길이를 변경하거나, 열의 이름을 바꾸는 것 외에 많은 변경 작업을 수행 할 수 있습니다.

아마도 새 열을 만들고 데이터를 이동하고 이전 열을 삭제해야 할 것입니다. 작은 테이블의 경우에는 정상입니다. 테이블이 큰 경우

ALTER TABLE t RENAME COLUMN c to c_old; 

ALTER TABLE t ADD COLUMN (c bigint); 

UPDATE t set c = c_old; 

ALTER TABLE t DROP COLUMN c_old CASCADE; 

그러나 : 때문에 네티가 업데이트 문을 실행하는 방법

, 그냥 완전히 새로운 테이블을 만들고 통해 데이터를 이동하는 것이 더있을 수 있습니다. NZ는 나중에 업데이트 된 레코드의 이전 버전을 삭제하기 위해 원본 테이블의 신랑이 필요합니다.

CREATE TABLE t_new (c bigint) DISTRIBUTE ON (c); 

INSERT INTO t_new SELECT c FROM t; 

ALTER TABLE t RENAME to t_old; 

ALTER TABLE t_new RENAME to t; 

DROP TABLE t_old; 
+0

답장을 보내 주셔서 감사합니다 :)에 대한 – iman453

+2

Netezza를 실제로 행을 업데이트하지 않습니다 (단지 호기심, 행을 업데이트하는 것보다 네티에 빠르게 모든 행이 새 테이블을 만드는 방법을 ... 그것은 좀 직관적 것) 그 자리에. 대신 업데이트를 수행 할 때 행의 새로운 "버전"으로 새 행을 삽입하고 이전 행을 숨 깁니다. 전체 테이블을 할 때 본질적으로 100 % 새로운 삽입 작업을 수행합니다. 그러나 GROOM TABLE 명령으로 제거해야하는 "숨겨진"행은 여전히 ​​있습니다. 전체 테이블을 업데이트 할 때, 새로 만들기는 더 이상 신경 쓰지 않아도됩니다. –

+0

아, 맞아. 감사! – iman453