在 Redshift 'CREATE TABLE AS' 查询中指定数据类型
Specify Data Types in Redshift 'CREATE TABLE AS' Query
有没有办法在执行 Redshift CREATE TABLE AS
查询时指定数据类型并保持约束?
在下面的示例中,我希望能够创建 table1 的副本,其中列 column2
为 NVARCHAR(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 的约束,请将其作为架构的一部分。如果数据正在动态确定模式,则说明存在问题。
有没有办法在执行 Redshift CREATE TABLE AS
查询时指定数据类型并保持约束?
在下面的示例中,我希望能够创建 table1 的副本,其中列 column2
为 NVARCHAR(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 的约束,请将其作为架构的一部分。如果数据正在动态确定模式,则说明存在问题。