有没有办法在执行Redshift CREATE TABLE AS
查询时指定数据类型并保留约束?
在下面的示例中,我希望能够创建table1的副本,其中列column2
为NVARCHAR(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查询中完成。任何变通方法或技巧将不胜感激! :)
答案 0 :(得分:1)
从SQL的角度来看,答案是“是”和“是”。是的,您可以指定数据类型:使用CAST
将列转换为所需的类型。不,你不能指定约束,因为你不能:没有语法来做到这一点。
如果您担心表的约束,请将其作为模式的一部分。如果数据动态确定模式,则有些不对劲。