首页 > 解决方案 > 使用 knex.js 触发器创建 Postgres 以在更新表后更新时间

问题描述

我有一个包含 id、username、job、job_id、created_at 和 updated_at 列的表。我使用 knex.js 创建表,如果表有任何修改,我希望表捕获时间,例如,如果从前端更新列作业,则列 updated_at 应该存储时间列已更新。

我是 Postgres 触发器的新手,但我试图实现这一点;

const FUNCTION_NAME = 'on_time_update';

CREATE OR REPLACE FUNCTION ${FUNCTION_NAME}()
RETURNS TRIGGER AS 
$BODY$
BEGIN
    NEW.updated_at = now();
    RETURN NEW
END;
$BODY$ LANGUAGE PLPGSQL;

export async function up(knex: Knex): Promise<void> {
await knex.raw(createOnUpdateTrigger('jobs', FUNCTION_NAME));
}

export async function drop(knex: Knex): Promise<void> {
await knex.raw(dropTrigger('jobs', FUNCTION_NAME));
}

使用 knex,我创建了一个触发器;

createOnUpdateTrigger: (name, table, procedure) => `
     CREATE TRIGGER ${name}
     BEFORE UPDATE on ${table}
     FOR EACH ROW
     EXECUTE PROCEDURE ${procedure}();
`
dropTrigger: (name, table) => `
     DROP TRIGGER ${name} ON ${table};
`

通过这样做,我能够成功创建迁移,但我的列没有被更新,我也没有收到错误。我不确定我做错了什么。任何帮助将不胜感激,因为我是新手!谢谢!

标签: postgresqltriggersknex.js

解决方案


推荐阅读