向Hasura插入JSON对象数组报malformed array literal错误如何解决
错误原因
malformed array literal: "[]"是PostgreSQL抛出的类型不匹配错误,核心问题是你传入的值和列定义的类型不兼容:
- 如果你对应列的类型是PostgreSQL原生数组类型(比如
text[]、jsonb[]),这类列不接收JSON序列化后的字符串格式的值,你用JSON.stringify转换后的"[]"字符串不符合PostgreSQL原生数组的字面量规则,因此触发报错。 - 如果你对应列的类型是
json/jsonb,只有当你设置了额外的列校验规则要求输入为数组时,才有可能触发该错误,这种情况概率较低。
表结构参考

解决方案
方案1:列保持原生数组类型
删除客户端的JSON.stringify序列化逻辑,直接将原始JS数组作为mutation参数传入即可,Hasura会自动将JS数组转换为PostgreSQL可识别的数组格式。
参考mutation调用示例:
mutation InsertData($my_array_col: jsonb[]!) { insert_your_table_name(objects: {my_array_col: $my_array_col}) { returning { id } } }
客户端传参时直接传入[{...}, {...}]格式的原始数组即可,无需序列化。
方案2:修改列类型为jsonb
如果你的数组存储的是结构不固定的对象,更推荐使用jsonb类型存储:
- 在Hasura控制台将对应列的类型修改为
jsonb - 可以保留
JSON.stringify序列化逻辑,也可以直接传入原始JS数组,Hasura对jsonb类型的列兼容两种输入格式,都会自动完成存储。
内容的提问来源于stack exchange,提问作者Natnael
相关产品推荐
相关产品推荐

