I have a Postgres user table with roles as json. I am struggling to insert data into it.
Roles looks like this:

[‘角色用户’,‘角色管理员’,‘角色超级管理员’]

我试过几种方法,包括下面的方法,但似乎都不起作用:

INSERT INTO myschema."user" (username, roles) 
VALUES ('brk', ARRAY[‘角色用户’,‘角色管理员’,‘角色超级管理员’]::json);

我没有得到一个错误,至少明确地说.

表格定义:

CREATE TABLE myschema."user" (
   id SERIAL NOT NULL, 
   username VARCHAR(180) NOT NULL,
   roles JSON NOT NULL, 
   password VARCHAR(255) NOT NULL, 
   PRIMARY KEY(id))

推荐答案

您正在try 将text[] native array类型的text个值转换为json type value with a json array 106.不幸的是,这不会起作用,因为没有现成的隐式强制转换定义,但是你可以用to_json() function:demo来转换它.

INSERT INTO myschema."user" (username, roles) 
VALUES ('brk', to_json(ARRAY['ROLE_USER', 'ROLE_ADMIN', 'ROLE_SUPER_ADMIN']))
RETURNING *;
username roles
brk ["ROLE_USER","ROLE_ADMIN","ROLE_SUPER_ADMIN"]

如果你正在寻找一个json常量/文字语法:

INSERT INTO myschema."user" (username, roles) 
VALUES ('brk', '["ROLE_USER","ROLE_ADMIN","ROLE_SUPER_ADMIN"]')
RETURNING *;

只要将roles列定义为json类型,就不需要显式添加::json类型转换.

Sql相关问答推荐

获取每个帖子的匹配关键字列表

从2个表中查找每条记录的唯一最接近的日期匹配

部分匹配表中元素的MariaDB查询查找结果

Django将字符串筛选为整数?

PostgreSQL:使用JSONB中的字段使用jsonb_to_Records()填充记录

将计算列设置为持久化的目的是什么?

冲突查询的UPDATE时违反非空约束

如何根据行状态设置正确的标志

将伪数据插入Postgres表

删除行而不使数据库超载

当 ansible 变量未定义或为空时,跳过 sql.j2 模板中的 DELETE FROM 查询

使用 union 的有序结果获取行数

更新之前如何获得价值

带有数组输入参数的Snowflake UDF优化

如何按日期和位置对最近 3 个报告日期的 SQL 查询结果进行透视?

如何将多行的查询结果合并为一行

条件意外地显着降低性能的地方

面对来自以下两个代码的不同输出

为什么 Oracle 在一个查询中对同一张表同时执行 TABLE SCAN 和 INDEX UNIQUE SCAN?

在时态表和非时态表之间使用 EXCEPT 的 SQL 子查询给出表达式错误数