gpt4 book ai didi

javascript - 如何在 Knex.js 中正确设置 `updatedAt` 时间戳?

转载 作者:行者123 更新时间:2023-11-29 13:09:02 25 4
gpt4 key购买 nike

我正在使用 Knex.js(0.19.0) 和 PostgreSQL(11-alpine, pg@7.11.0 做一个 REST 教程>),并且我注意到当我发出 PUT 请求并更新数据时,updatedAt 列不起作用。

目前这是我的 users 表:

// users_migration.js

exports.up = function(knex) {
return knex.schema.createTable('users', function(table) {
table
.increments('id')
.primary()
.unsigned();
table.string('firstName');
table
.string('lastName')
.index()
.notNullable();
table
.string('email')
.unique()
.index()
.notNullable();
table.string('password').notNullable();
table.string('role').defaultTo('STAFF');
table.boolean('isActive').defaultTo(false);
table.timestamp('createdAt').defaultTo(knex.fn.now());
table.timestamp('updatedAt').defaultTo(knex.fn.now());
});
};

我试过这个:

    table.timestamp('createdAt').defaultTo(knex.raw('CURRENT_TIMESTAMP'));
table
.timestamp('updatedAt')
.defaultTo(knex.raw('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'));

但它也不起作用。

如何让它发挥作用?请帮忙。

最佳答案

postgresql 不支持语法 CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

使 updatedAt 在列更新时自动更新的唯一方法是使用触发器。

这可能有效(从 Update timestamp when row is updated in PostgreSQL 复制粘贴):

exports.up = function(knex) {
return knex.schema.createTable('users', function(table) {
...
table.timestamp('updatedAt').defaultTo(knex.fn.now());
})
.raw(`
CREATE OR REPLACE FUNCTION update_updated_at_column()
RETURNS TRIGGER AS $$
BEGIN
NEW."updatedAt"=now();
RETURN NEW;
END;
$$ language 'plpgsql';
`)
.raw(`
CREATE TRIGGER update_user_updated_at BEFORE UPDATE
ON ?? FOR EACH ROW EXECUTE PROCEDURE
update_updated_at_column();
`, ['users']);

};

如果有语法错误或类似错误,请告诉我。

关于javascript - 如何在 Knex.js 中正确设置 `updatedAt` 时间戳?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57167350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com