Yii2 PostgreSQL如何添加默认值从另一列addColumn在迁移

bq3bfh9z  于 2023-01-02  发布在  PostgreSQL
关注(0)|答案(1)|浏览(101)

我有4列的PostgreSQL DB表,例如col1,col2,col3,col4。Col3是唯一索引。我想添加一个notNull的新列和col3的默认值,然后我想使新创建的列也是唯一的?可以通过简单的Yii2迁移来实现吗?

h22fl7wq

h22fl7wq1#

不能直接得到你想要的;默认表达式不能引用另一列。您可以做的是使新列 * 唯一 * 但可以为空,然后更新值,最后使列 * 不为空 *。如果需要,您可以创建触发器来维护新列。(请参阅demo

alter table a_table add new_col text unique;

update a_table set new_col = col3; 

-- clean up any null values in new_col; (there is nothing saying
alter table a_table alter column new_col set not null;

如果需要长期创建触发器函数和触发器以管理new_col

-- set new_col column 
create or replace function new_col()
  returns trigger 
 language plpgsql
as $$
begin 
    new.new_col = coalesce(new.new_col, new.col3, old.new_col, '');   -- always on update ???   
    return new;     
end;
$$; 

create trigger a_table_biur
  before insert or update
  on a_table 
  for each row execute function new_col();

触发器函数使用了必要的最小逻辑,不会满足每个条件。您需要对此进行评估。

相关问题