1

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

抱歉,如果答案显示在谷歌搜索中,我已经尝试过寻找但无法找到一些东西。

4

1 回答 1

4

除了添加/删除列本身、设置或清除默认值、更改 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 执行更新语句的方式,创建一个全新的表并移动数据可能会更好。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;
于 2012-10-30T12:37:54.577 回答