[英]Redshift Alter table if not exists
我正在尝试在红移表中添加一个新字段。 但我只想在该字段不存在时添加。 我尝试用 IF NOT EXISTS 包装它。 但我收到以下错误:Amazon](500310) 无效操作:“IF”处或附近的语法错误 Position:5;
BEGIN
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = 'schema_name' and table_name='table_name' and column_name='new_field') THEN
ALTER TABLE schema_name.table_name
ADD new_field INT;
END IF;
COMMIT;
我不确定我是否在 BEGIN 块中正确使用了“IF NOT EXISTS”语句。 有人可以帮帮我吗?
提前致谢!
使用 EXCEPTION 处理它可能会更好
BEGIN
ALTER TABLE
<table_name> ADD COLUMN <column_name> <column_type>;
EXCEPTION
WHEN duplicate_column
THEN RAISE NOTICE 'column <column_name> already exists in <table_name>.';
END;
Yauheni Khvainitski 的回答并非完全错误。 但是您必须使用 SP 并且 Redshit 拥有的唯一选项(此时是“在其他情况下除外”)。 一个例子:
CREATE OR REPLACE PROCEDURE change_column_to_big_int_TABLE_NAME_X(column_name varchar(200)) AS
$$
DECLARE
new_column_name VARCHAR;
BEGIN
SELECT INTO new_column_name (table_name)||'_new';
-- RAISE INFO 'new_table_name = % table_name = %',new_column_name, table_name;
ALTER TABLE TABLE_NAME_X ADD COLUMN "(new_column_name)" bigint;
EXCEPTION WHEN OTHERS
THEN RAISE NOTICE 'column already exists on table';
END;
$$
LANGUAGE plpgsql;
CALL change_column_to_big_int_TABLE_NAME_X('COLUMN_Y');
来自 AWS 的一些链接:
另请注意,这在此时有效。 Redshift 似乎一直在发展。
我认为的问题是 AWS Redshift 不支持 IF 语句,而是使用 CASE 语句。 CASE 语句的实现方式与 IF 非常相似。 但我承认,我更喜欢 IF 语句。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.