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 命令。
要复制此功能,您的应用程序首先需要查询 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。
以下 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 命令。
要复制此功能,您的应用程序首先需要查询 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。