在 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 然后执行 INSERT 语句来分两步完成此操作使用 test.table1 中的数据。不过,我很好奇是否可以在一个 CREATE TABLE AS 查询中完成此操作。任何解决方法或提示将不胜感激! :)

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

如果您担心 table 的约束,请将其作为架构的一部分。如果数据正在动态确定模式,则说明存在问题。