我希望代码能够自动更新时间戳时,一个新的行插入,因为我可以在MySQL中使用CURRENT_TIMESTAMP。
我将如何在PostgreSQL中实现这一点?
CREATE TABLE users (
id serial not null,
firstname varchar(100),
middlename varchar(100),
lastname varchar(100),
email varchar(200),
timestamp timestamp
)
要在插入新行时自动更新PostgresSQL中的时间戳字段,可以将current_timestamp设置为默认值:
CREATE TABLE users (
id serial not null,
firstname varchar(100),
middlename varchar(100),
lastname varchar(100),
email varchar(200),
timestamp timestamp default current_timestamp
)
除此之外,你可能想要阻止任何人在未来更新这个字段,这可以通过创建一个更新触发器并应用它来完成:
CREATE OR REPLACE FUNCTION stop_change_on_timestamp()
RETURNS trigger AS
$BODY$
BEGIN
-- always reset the timestamp to the old value ("actual creation time")
NEW.timestamp := OLD.timestamp;
RETURN NEW;
END;
$BODY$
CREATE TRIGGER prevent_timestamp_changes
BEFORE UPDATE
ON users
FOR EACH ROW
EXECUTE PROCEDURE stop_change_on_timestamp();