【发布时间】:2016-09-29 15:54:18
【问题描述】:
从 Netezza 7.2 版开始,是否仍然没有其他方法可以将列约束 NOT NULL 更改为 NULL 并再次返回,而无需创建新表并删除旧表?更改非常大的表的列约束似乎是一种非常残酷的方法。
【问题讨论】:
标签: sql constraints netezza alter-table
从 Netezza 7.2 版开始,是否仍然没有其他方法可以将列约束 NOT NULL 更改为 NULL 并再次返回,而无需创建新表并删除旧表?更改非常大的表的列约束似乎是一种非常残酷的方法。
【问题讨论】:
标签: sql constraints netezza alter-table
从技术上讲,这不是唯一的方法,因为您可以添加和重命名列,因此您可以执行以下操作:
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。有了它,您可以更简单地解决这个问题,就像您在更改分布列时必须做的那样。
【讨论】: