从Netezza版本7.2开始,仍然没有其他方法可以将列约束NOT NULL更改为NULL并再次返回而不创建新表并删除旧表?似乎是一种非常残酷的方法来更改非常大的表的列约束。
答案 0 :(得分:0)
从技术上讲,这不是唯一的方法,因为你可以添加和重命名列,所以你可以这样做:
TESTDB.ADMIN(ADMIN)=> create table test1 (col1 integer not null);
CREATE TABLE
TESTDB.ADMIN(ADMIN)=> alter table test1 add column (col2 integer);
ALTER TABLE
TESTDB.ADMIN(ADMIN)=> update test1 set col2=col1;
UPDATE 0
TESTDB.ADMIN(ADMIN)=> alter table test1 drop column col1 cascade;
ALTER TABLE
TESTDB.ADMIN(ADMIN)=> alter table test1 rename column col2 to col1;
ALTER TABLE
TESTDB.ADMIN(ADMIN)=> groom table test1 versions;
NOTICE: Groom will not purge records deleted by transactions that started after 2016-09-29 12:38:13.
NOTICE: If this process is interrupted please either repeat GROOM VERSIONS or issue 'GENERATE STATISTICS ON "TEST1"'
NOTICE: Groom processed 0 pages; purged 0 records; scan size unchanged; table size unchanged.
GROOM VERSIONS
但是,这并不是一个残酷的"在I / O方面。日常的Netezza生活经常涉及大型餐桌的CTAS。有了它,您可以更简单地解决这个问题,就像您在更改分发列时所要做的那样。