在MySQL中,我们可以在changetimestamp
每次更改行时在其中更新列的地方执行此操作:
create table ab (
id int,
changetimestamp timestamp
NOT NULL
default CURRENT_TIMESTAMP
on update CURRENT_TIMESTAMP
);
在PostgreSQL中有类似的事情吗?
在MySQL中,我们可以在changetimestamp
每次更改行时在其中更新列的地方执行此操作:
create table ab (
id int,
changetimestamp timestamp
NOT NULL
default CURRENT_TIMESTAMP
on update CURRENT_TIMESTAMP
);
在PostgreSQL中有类似的事情吗?
timestamp
根据版本和设置对列提供了许多“特殊处理” ,(很遗憾!)在Postgres中无法复制。就像在特定星座中输入时允许0
输入一timestamp
列或转换NULL
为当前时间戳一样。一定要研究两个RDBMS的手册,以了解细微的差异:MySQL和Postgres。
Answers:
创建一个函数来更新表的changetimestamp列,如下所示:
CREATE OR REPLACE FUNCTION update_changetimestamp_column()
RETURNS TRIGGER AS $$
BEGIN
NEW.changetimestamp = now();
RETURN NEW;
END;
$$ language 'plpgsql';
每当发生如下更新时,在表上创建一个调用update_changetimestamp_column()函数的触发器:
CREATE TRIGGER update_ab_changetimestamp BEFORE UPDATE
ON ab FOR EACH ROW EXECUTE PROCEDURE
update_changetimestamp_column();
update_changetimestamp_column
?