如何在PostgreSQL中将列作为常量字段?

时间:2015-10-07 06:56:28

标签: php sql postgresql

我正在PostgreSQL创建一个表格,我想将一些列添加为常量列,就像我将值定义为零然后insertupdate无法更改列值

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

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 :(得分: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();