我正在PostgreSQL
创建一个表格,我想将一些列添加为常量列,就像我将值定义为零然后insert
和update
无法更改列值
在insert
或update
查询中使用时,更多信息也不应显示任何错误,是否可能?
示例:
表:
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 :(得分: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 :(得分: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();