更新时自动更新时间戳

Auto update timestamp on update

我创建了一个 table,其代码如下:

CREATE TABLE products (
    id SERIAL, 
    store_id INTEGER NOT NULL,
    url TEXT UNIQUE,
    visible BOOLEAN,
    added_date timestamp without time zone NOT NULL DEFAULT NOW(),
    PRIMARY KEY(id, store_id)
);

Peewee 一起,我确实发现在更新时,每当我通过

对行进行更新时,时间戳不会自动更新
class Products(Model):
    id = IntegerField(column_name='id')
    store_id = TextField(column_name='store_id')
    url = TextField(column_name='url')
    visible = BooleanField(column_name='visible')
    added_date = TimestampField(column_name='added_date')

    class Meta:
        database = postgres_pool
        db_table = "products"

    @classmethod
    def on_exists(cls, pageData):
        try:
            if exists := cls.select().where((cls.store_id == Stores.store_id) & (cls.url == pageData.url)).exists():
                # On update execution it should refresh the added_time to current time
                cls.update(visible=False).where((cls.store_id == Stores.store_id) & (cls.url == pageData.url)).execute()
            return exists
        except Products.DoesNotExist:
            return None

但是我的问题是每次我使用这个命令并成功更新。 added_time 时间戳似乎没有更新它的时间戳。我的问题是,它如何在更新时自动更新时间戳?

这是触发器的作业:

CREATE FUNCTION upd_ts() RETURNS trigger
   LANGUAGE plpgsql AS
$$BEGIN
   NEW.added_date = current_timestamp;
   RETURN NEW;
END;$$;

CREATE TRIGGER upd_ts BEFORE UPDATE ON products
   FOR EACH ROW EXECUTE PROCEDURE upd_ts();

触发器将在修改行并更改即将插入的行之前触发。

有关所有详细信息,请参阅 the documentation