Redshift:如果不存在则添加列

Redshift: add column if not exists

以下 works in Postgres 9.6 但不在 Redshift 中:

ALTER TABLE stats
    ADD COLUMN IF NOT EXISTS panel_exit timestamp;

是否可以在 Redshift 中实现相同的功能?

没有等同于 ADD COLUMN IF NOT EXISTS 的 Amazon Redshift 命令。

参见:ALTER TABLE documentation

要复制此功能,您的应用程序首先需要查询 table 元数据,然后决定是否发出 ADD COLUMN 命令。

John 的回答为我指明了正确的方向,这是我发现在 Redshift 中检查列是否存在最有效的命令。

SELECT EXISTS(
    SELECT * FROM pg_table_def
    WHERE schemaname = '<my_schema_name>'
    and tablename = '<my_table_name>'
    and "column" = '<my_column_name>'
);

请注意 "column" 周围的双引号是必需的,因为 column 也是一个关键字。

此外,如果您感兴趣的 table 不在 public 架构中。您可能需要先修改搜索路径,以便按预期返回结果:

set SEARCH_PATH to <schema_name>;

有关详细信息,请参阅 PG_TABLE_DEF AWS Docs