Amazon redshift “红移”的解决方法;如果不存在,则添加列";

Amazon redshift “红移”的解决方法;如果不存在,则添加列";,amazon-redshift,ddl,Amazon Redshift,Ddl,我正试图通过Spark Redshift执行S3复制操作,并希望在运行copy命令之前修改Redshift表结构,以便添加任何缺少的列(它们都应该是VARCHAR) 我能做的是在运行拷贝之前发送一个SQL查询,所以理想情况下,我希望更改TABLE ADD COLUMN IF NOT EXISTS COLUMN\u name VARCHAR(256)。不幸的是,如果不存在,Redshift不支持ADD COLUMN,所以我目前正在寻找一种解决方法 我试图查询pg_table_def表以检查列的存在

我正试图通过Spark Redshift执行S3复制操作,并希望在运行copy命令之前修改Redshift表结构,以便添加任何缺少的列(它们都应该是VARCHAR)

我能做的是在运行拷贝之前发送一个SQL查询,所以理想情况下,我希望更改TABLE ADD COLUMN IF NOT EXISTS COLUMN\u name VARCHAR(256)。不幸的是,如果不存在,Redshift不支持ADD COLUMN,所以我目前正在寻找一种解决方法

我试图查询
pg_table_def
表以检查列的存在,这是可行的,但我不确定如何用ALTER table语句链接它。这是我查询的当前状态,我愿意接受任何关于完成上述任务的建议

select 
    case when count(*) < 1 then ALTER TABLE tbl { ADD COLUMN 'test_col' VARCHAR(256) }
    else 'ok'
    end
from pg_table_def where schemaname = 'schema' and tablename = 'tbl' and pg_table_def.column = 'test_col'
选择
当count(*)小于1时,则更改表tbl{ADD COLUMN'test_col'VARCHAR(256)}
还有“好的”
结束
来自pg_table_def,其中schemaname='schema'和tablename='tbl',pg_table_def.column='test_col'

另外,我也看到了这个问题:,但是公认的答案并没有提到如何真正实现这一点。

您不能完全从SQL来实现这一点。您需要一些应用程序逻辑(红移之外)来查询架构,然后确定是否调用addcolumn命令。谢谢John。在等待答案的时候,我已经开始沿着这条路走下去了,这只是证实了解决方案是正确的:)你不能完全从SQL来做这件事。您需要一些应用程序逻辑(红移之外)来查询架构,然后确定是否调用addcolumn命令。谢谢John。我已经开始沿着这条路走下去,同时等待答案,这只是证实了解决方案是正确的:)