PostgreSQL向JSON类型字段插入数据失败问题求助
PostgreSQL JSON字段插入数组值的正确方法
你的INSERT语句失败主要有两个原因:
- 表定义中
password字段为NOT NULL,但你未在INSERT中提供该字段的值 - 直接将PostgreSQL数组强制转为JSON的方式错误,会生成不符合预期的JSON格式
正确的插入方式
以下几种方法都可以插入符合要求的JSON数组:
方法1:直接使用JSON数组字符串
INSERT INTO myschema."user" (username, roles, password) VALUES ('brk', '["ROLE_USER", "ROLE_ADMIN", "ROLE_SUPER_ADMIN"]'::json, 'your_secure_password');
方法2:使用json_build_array函数
该函数会直接将传入的参数构建为JSON数组:
INSERT INTO myschema."user" (username, roles, password) VALUES ('brk', json_build_array('ROLE_USER', 'ROLE_ADMIN', 'ROLE_SUPER_ADMIN'), 'your_secure_password');
方法3:使用array_to_json函数(PostgreSQL 9.5+)
如果需要基于PostgreSQL数组转换,使用该函数可以正确转为JSON数组:
INSERT INTO myschema."user" (username, roles, password) VALUES ('brk', array_to_json(ARRAY['ROLE_USER', 'ROLE_ADMIN', 'ROLE_SUPER_ADMIN']), 'your_secure_password');
验证插入结果
插入完成后,可以用以下语句验证roles字段的格式是否正确:
SELECT roles FROM myschema."user" WHERE username = 'brk';
预期结果应为:
["ROLE_USER", "ROLE_ADMIN", "ROLE_SUPER_ADMIN"]
内容的提问来源于stack exchange,提问作者BernardA
相关产品推荐
相关产品推荐

