postgresql - Sequelize 使用 uuid_generate_v4 设置默认值会给出语法错误
问题描述
我一直在遵循 SO 建议,描述如何在 Postgres 数据库中使用带有 Sequelize 的 uuid,并定义模型以生成 uuid 默认值。它在这里引用了这篇文章。
该建议需要uuid-ossp
扩展。我已经验证它已安装并在调用该函数的数据库上使用 SELECT 工作,并且还验证了扩展是“创建的”。所以数据库可以进行调用。
这篇文章建议像我在这段代码片段中所做的那样定义模型:
public_id: {
field: 'public_id',
type: Sequelize.UUID,
allowNull: false,
defaultValue: Sequelize.literal('uuid_generate_v4()'),
},
当我运行代码来创建表(将数据库与模型同步)时,我从 Sequelize 中得到一个错误:
Error: Invalid value Literal { val: 'uuid_generate_v4()' }
我调试到 Sequelize 中node_modules
,失败在sql_string.js
这里:
if (!val.replace) {
throw new Error(`Invalid value ${logger.inspect(val)}`);
}
因为replace
是 undefined on val
,uuid_generate_v4()
在我的情况下。有趣的事实:无论我在引号中加上什么,我都会得到同样的错误。
我认为我按照文章所述做的一切都是正确的。我错过了什么愚蠢的东西吗?
找到根本原因 的更新 对于任何未来的读者来说,好消息是这里给出的模型定义代码是完全正确的。所以捕捉到k。罗德曼曼尼克斯
问题根本不在于。我的比简单示例代码复杂得多的代码在某一时刻将 Sequelize 模型定义创建为对象,然后将它们传递给define
Sequelize 方法。奇怪的是,定义模型的代码在一个文件夹中使用了 Sequelize 安装,然后(由于配置错误),执行该模型define
的 Sequelize 使用了安装在不同文件夹中的 Sequelize。
在 Sequelize 代码的深处,它执行了一个 Javascript instanceof
,它看到对象的两个不同“源”并返回一个 false-y 值。一旦我弄清楚了,只需清理项目文件夹即可使一切正常。
解决方案
推荐阅读
- wso2 - 在 Siddhi 中相互比较长度批次的数据
- java - 在运行时覆盖 SpringBootJar 类
- javascript - 避免在分页时刷新页面 Laravel
- python - 如何定义曲线拟合中的函数?
- c++ - 优化:在 C 或 C++ 中缩小文件大小
- java - 如何将二进制消息作为输入流处理?
- regex - NotePad++ 正则表达式删除带有空格和某些字母的单词
- javascript - 在 Odoo 中覆盖 JavaScript 函数
- excel - 如何计算特定时间在多个时间间隔之间的次数(参见示例)
- javascript - 如何使用javascript检测字符串中的手机号码