Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更新/插入触发器之前的Postgresql不';似乎不起作用_Postgresql_Triggers_Plpgsql - Fatal编程技术网

更新/插入触发器之前的Postgresql不';似乎不起作用

更新/插入触发器之前的Postgresql不';似乎不起作用,postgresql,triggers,plpgsql,Postgresql,Triggers,Plpgsql,我有以下触发功能: CREATE OR REPLACE FUNCTION update_modelname_function() RETURNS trigger AS $BODY$ BEGIN IF tg_op = 'INSERT' THEN new.model_name := upper(new.model_name); RETURN new; END IF; IF tg_op = 'UPDATE' THEN old.model_name := u

我有以下触发功能:

CREATE OR REPLACE FUNCTION update_modelname_function()
  RETURNS trigger AS
$BODY$
BEGIN
  IF tg_op = 'INSERT' THEN
     new.model_name := upper(new.model_name);
     RETURN new;
  END IF;
  IF tg_op = 'UPDATE' THEN
     old.model_name := upper(old.model_name);
     RETURN new;
  END IF;
END
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;

我试图实现的是,列model_name的值在表中持久化时总是大写。然而,似乎什么也没有发生。有什么想法吗?

你不小心更新了
旧的
,而不是
新的
。尝试:

CREATE OR REPLACE FUNCTION update_modelname_function()
  RETURNS trigger AS
$BODY$
BEGIN
  IF tg_op = 'INSERT' THEN
     new.model_name := upper(new.model_name);
     RETURN new;
  ELSIF tg_op = 'UPDATE' THEN
     new.model_name := upper(new.model_name);
     RETURN new;
  END IF;
END
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
如果示例显示了整个代码,而实际触发器仅在
INSERT
和/或
UPDATE
时触发,则可以进一步简化:

CREATE OR REPLACE FUNCTION update_modelname_function()
  RETURNS trigger AS
$BODY$
BEGIN

new.model_name := upper(new.model_name);
RETURN new;

END
$BODY$
  LANGUAGE plpgsql VOLATILE;

您意外地更新了
旧的
,而不是
新的
。尝试:

CREATE OR REPLACE FUNCTION update_modelname_function()
  RETURNS trigger AS
$BODY$
BEGIN
  IF tg_op = 'INSERT' THEN
     new.model_name := upper(new.model_name);
     RETURN new;
  ELSIF tg_op = 'UPDATE' THEN
     new.model_name := upper(new.model_name);
     RETURN new;
  END IF;
END
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
如果示例显示了整个代码,而实际触发器仅在
INSERT
和/或
UPDATE
时触发,则可以进一步简化:

CREATE OR REPLACE FUNCTION update_modelname_function()
  RETURNS trigger AS
$BODY$
BEGIN

new.model_name := upper(new.model_name);
RETURN new;

END
$BODY$
  LANGUAGE plpgsql VOLATILE;