【以下的问题经过翻译处理】 我正在尝试在Redshift上实现从SQL Server的一个功能:如果某一列存在忽略该列,否则将其添加到表中。
我在stackoverflow上看到了这些帖子,但没有找到适当的解决方案:
- https://stackoverflow.com/questions/65103448/redshift-alter-table-if-not-exists
- https://stackoverflow.com/questions/42035068/redshift-add-column-if-not-exists
- https://stackoverflow.com/questions/42669237/workaround-in-redshift-for-add-column-if-not-exists
我能够判断的列是否存在,得到TRUE或FALSE值。 但是我不知道如何更改表以添加或删除一个列。 我是新手,非常感激任何回应!
以下是我尝试的一些内容:
IF (SELECT EXISTS(SELECT * FROM pg_catalog.pg_table_def
WHERE schemaname = 'my_schema'
AND tablename = 'my_table'
AND "column" = 'my_new_column'
)) <> TRUE
THEN
ALTER TABLE my_table
ADD COLUMN my_new_column varchar
END IF;
CREATE OR REPLACE PROCEDURE if_else()
LANGUAGE plpgsql
AS $$
BEGIN
IF (SELECT EXISTS(SELECT * FROM pg_catalog.pg_table_def
WHERE schemaname = 'my_schema'
AND tablename = 'my_table'
AND "column" = 'my_new_column'
)) <> TRUE
THEN
ALTER TABLE my_table
ADD COLUMN my_new_column varchar
END IF;
END;
$$
;
CALL if_else();
还有一些失败的测试:
CREATE OR REPLACE PROCEDURE alter_my_table()
AS $$
BEGIN
ALTER TABLE my_table
ADD COLUMN my_new_column varchar
END;
$$
LANGUAGE plpgsql
;
SELECT
CASE WHEN COUNT(*) THEN 'warning: column exists already.'
ELSE CALL alter_my_table();
END
FROM pg_catalog.pg_table_def
WHERE schemaname = 'my_schema'
AND tablename = 'my_table'
AND "column" = 'my_new_column'
感谢您的时间。