2015-10-07 50 views
0

我在PostgreSQL中創建一個表格,我想添加一些列作爲常量列,如果我將其值定義爲零,則insertupdate無法更改該列值。如何在PostgreSQL中將列設置爲常量字段?

此外,在使用insertupdate查詢時也應該不會顯示任何錯誤,是否有可能?

實施例:

表:

CREATE TABLE tbbt 
(
    const_col integer NOT NULL DEFAULT 0, 
    id integer, 
    val text 
) 

查詢:

insert into tbbt(const_col,id,val) values(5,1,'ABC'); 
insert into tbbt(const_col,id,val) values(6,2,'AVD'); 

update tbbt set val ='XZX', const_col = 3 where id =2; 

select * from tbbt; 

輸出:

它返回我

const_col id val 
5   1 ABC 
3   2 XZX 

,但我需要

const_col id val 
0   1 ABC 
0   2 XZX 
+0

NOT NULL,check value = 0?但爲什麼不斷的列? – jarlh

+0

你是否在尋找類似這樣的東西:-http://sqlfiddle.com/#!15/a22fb/2 –

+0

我已經添加了來自你的小提琴的例子,你能重新檢查它嗎? –

回答

1

可以靜默設置默認值觸發:

create table test(id int, zero int); 

create or replace function test_trigger() 
returns trigger language plpgsql as $$ 
begin 
    new.zero = 0; 
    return new; 
end $$; 

create trigger test_trigger 
before insert or update on test 
for each row 
execute procedure test_trigger(); 

insert into test values (1, 1), (2, 2); 

select * from test 

id | zero 
----+------ 
    1 | 0 
    2 | 0 
(2 rows)  
1

可以使用觸發器用於此目的:

CREATE OR REPLACE FUNCTION set_constant_field_value() 
    RETURNS trigger AS 
$BODY$ 
BEGIN 
    NEW.constant_column = 'constant value'; 
    RETURN NEW; 
END; 
$BODY$ 

insert觸發。你也必須創建相同的觸發器update

CREATE TRIGGER before_insert_into_mytable 
BEFORE INSERT 
ON mytable 
FOR EACH ROW 
EXECUTE PROCEDURE set_constant_field_value(); 
相關問題