2015-03-19 94 views
0

我有一个表“B2S”PSQL程序功能无法识别列

Column |   Type   | Modifiers 
-----------+-----------------------+----------- 
id  | character varying(50) | not null 
list  | character varying  | not null 
issue  | date     | not null 
due  | date     | 

1.I想使因自动列30天内较发行列,每当我们做一个新行

Triggers:

b2sinsert 
BEFORE INSERT OR UPDATE ON b2s 
FOR EACH ROW EXECUTE PROCEDURE dueupdate() 

下面是该过程:

BEGIN NEW.due = (issue + INTERVAL '30 days'); NEW.issue = issue; NEW.list = list; NEW.id = id; RETURN NEW; END; 

当我试图在表中插入一个元素,我得到以下错误:

ERROR: column "issue" does not exist 
LINE 1: SELECT (issue + INTERVAL '30 days') 
      ^
QUERY: SELECT (issue + INTERVAL '30 days') 
CONTEXT: PL/pgSQL function dueupdate() line 1 at assignment 
+0

那么,如果第一个提供的“表”是books2学生,那么我不会在那里看到这样一个专栏 - 那么为什么你试图在那里写一个值呢?也 - 可怕的标签。你怎么能在同一时间将问题标记为psql和mysql? – murison 2015-03-19 07:57:27

+0

我试图使触发发生**后**插入或更新以达到相同的结果 – Rice 2015-03-19 20:48:45

回答

1

好 - 如果你是在触发器 - 必须始终地址(即riggered触发器表)列前缀来与NEW.OLD.元组类型(案例无关紧要) 此外 - 您不必更改所有值。为了您的目的,这个建议立即进行删除已经足够了:

BEGIN NEW.due = (NEW.issue + INTERVAL '30 days'); END; 

注意,影响了新的元组只能在BEFORE UPDATE触发器!