2015-10-13 49 views
0

我有這個疑問:賦值到現場檢查條件 - Postgres的後

ALTER TABLE MERCHANTS ADD COLUMN merchant_image bytea, 
         ADD COLUMN merchant_logo bytea, 
         ADD COLUMN merchant_address VARCHAR(100), 
         ADD COLUMN merchant_phone VARCHAR(50), 
         ADD COLUMN order_type VARCHAR(15) CHECK(order_type IN ('TAKE_AWAY', 'HOME_DELIVERY','NO_ORDERING')), 
         ADD COLUMN open_until TIME, 
         ADD COLUMN order_until TIME 

爲order_until我的條件,如果是ORDER_TYPE比NO_ORDERING它的默認值是0。我怎麼可以這樣寫,有什麼建議?

+1

這可能是你在找什麼:http://stackoverflow.com/a/20234929/42580 – UlfR

回答

0

不幸的是,你不能做到這一點與DEFAULT語法,用於the documentation

值是任何不含變量的表達式(不 不允許子查詢和 在當前的表到其它字段的交叉引用) 。

您可以使用觸發器來代替,例如:

create or replace function merchants_insert_update_trigger() 
returns trigger language plpgsql as $$ 
begin 
    if new.order_type = 'NO_ORDERING' then 
     new.order_until:= '0:0:0'::time; 
    end if; 
    return new; 
end $$; 

create trigger merchants_insert_update_trigger 
before insert or update on merchants 
for each row execute procedure merchants_insert_update_trigger();