在Netezza中将NOT NULL约束更改为NULL

时间:2012-10-29 22:06:51

标签: data-warehouse netezza

有什么方法可以将Nelezza的非可空列更改为可空? (或者我是否必须在表中创建一个新的可为空的列,传输数据并删除旧列?)

很抱歉,如果答案显示谷歌搜索,我已经尝试过查找并找不到任何内容。

1 个答案:

答案 0 :(得分:3)

除了添加/删除列本身,设置或清除默认值,更改varchar的长度以及重命名列之外,您无法在NZ 6.0中更改列。

您可能需要创建新列,移动数据,删除旧列。 对于一个小桌子,这应该没问题。

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;

但是,如果表格很大:

由于netezza如何执行更新语句,因此创建一个全新的表并移动数据可能更好。新西兰之后需要修改原始表格以删除旧版本的更新记录。

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;