续集竞争条件 |获取或创建

问题描述

我知道以前有人问过这个问题,但就我而言,它看起来不适合。

我们的 postgres 数据库正在复制运行(这可能会导致问题)。这是它的代码

// the following code is wrapped in connection.transaction(async() => { .. })

const user = await models.user.findOne({
    include: [{ model: models.settings,as: 'settings' }],where: { /* some conditions */ }
});

const { settings } = user;

if (!settings) {
    const defaults = getDefaults();
    const created = await models.settings.create(defaults);

    return created;
}
return settings;

我目前正面临同一用户的多个设置条目,这不应该发生。我坚信这是此代码的竞争条件问题。至少 createdAt 时间戳显示重复项的相同值。

在这里使用表/行锁有意义吗?实现会是什么样子?我无法通过 here 中的文档。 level 有什么作用?没有描述。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)