在Redshift中指定数据类型' CREATE TABLE AS'询问

时间:2016-04-21 13:24:45

标签: sql amazon-web-services amazon-redshift

有没有办法在执行Redshift CREATE TABLE AS查询时指定数据类型并保留约束?

在下面的示例中,我希望能够创建table1的副本,其中列column2NVARCHAR(500)类型,而不是VARCHAR(255),并保留{{ 1}} column1约束。

NOT NULL

编辑:我知道我可以通过使用正确的数据类型和约束显式创建CREATE TABLE test.table1 (column1 INT NOT NULL, column2 VARCHAR(255)); INSERT INTO test.table1 SELECT 1,'foo'; CREATE TABLE test.table2 AS SELECT column1,CAST(column2 AS NVARCHAR(500)) FROM test.table1; /* query executes successfully but still creates column2 as VARCHAR(255) and column1 is NULLABLE. */ CREATE TABLE test.table2 ( column1 INT NOT NULL ,column2 NVARCHAR(500) ) AS SELECT column1 ,column2 FROM test.table1; /* ERROR: 42601: syntax error at or near "as" */ ,然后使用数据执行INSERT语句,分两步完成此操作在test.table2。我很好奇,看看是否可以在一个CREATE TABLE AS查询中完成。任何变通方法或技巧将不胜感激! :)

1 个答案:

答案 0 :(得分:1)

从SQL的角度来看,答案是“是”和“是”。是的,您可以指定数据类型:使用CAST将列转换为所需的类型。不,你不能指定约束,因为你不能:没有语法来做到这一点。

如果您担心表的约束,请将其作为模式的一部分。如果数据动态确定模式,则有些不对劲。