繁体   English   中英

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

[英]Specify Data Types in Redshift 'CREATE TABLE AS' Query

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

在下面的示例中,我希望能够创建table1的副本,其列column2NVARCHAR(500)类型而不是VARCHAR(255)并保持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" */

编辑:我知道我可以通过使用正确的数据类型和约束显式创建test.table2 ,然后使用test.table1的数据执行INSERT语句, test.table1 我很好奇,看看是否可以在一个CREATE TABLE AS查询中完成。 任何变通方法或技巧将不胜感激! :)

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM