Teradata同大版本下Identity列行为为何不同?脚本执行结果不一致
Teradata同大版本下IDENTITY列建表行为差异原因及解决方法
核心原因:系统默认配置差异,而非版本变更
同属Teradata 17.20大版本,两个环境的行为差异不是版本功能变更导致的,而是数据库默认Primary Index(PI)配置不同。
具体细节说明
- Teradata的
DefaultPI配置参数决定了当建表语句未显式指定Primary Index时的行为:- 当
DefaultPI=ON(Teradata Express默认配置):系统会自动将表中第一个NOT NULL的整数类型列(即你的脚本里的TestIDIDENTITY列)设为Primary Index,因此表不是NoPI表,IDENTITY列可以正常生效。 - 当
DefaultPI=OFF(托管版ClearSpace的配置):建表时如果未显式指定PI,表会被创建为NoPI表。而Teradata明确禁止在NoPI表中使用IDENTITY列,因此触发报错:Syntax error: Identity Column in a NoPI table is unsupported.
- 当
解决方法
最稳妥的方式是显式指定Primary Index,避免依赖环境默认配置,修改后的脚本如下:
CREATE MULTISET TABLE "test" ( "TestID" BIGINT GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 NO CYCLE) NOT NULL, "Version" VARCHAR (30) ) PRIMARY INDEX("TestID");
如果需要保留环境默认行为,也可联系托管服务商调整DefaultPI参数为ON,但显式指定PI的写法更具可移植性,适合跨环境使用。
内容的提问来源于stack exchange,提问作者Yndigo Dream
相关产品推荐
相关产品推荐

