在 psql 中将列 varchar 更改为 json
Alter column varchar to json in psql
您好,我正在尝试将 table 中的列从 varchar 转换为 json,而 table 已经有一些字符串数据。我试着用下面的命令来做。
Database=# alter table table_name alter column message type json using
message::json;
但是命令失败并出现以下错误。
ERROR: invalid input syntax for type json
DETAIL: Token "This" is invalid.
CONTEXT: JSON data, line 1: This...
注意:消息栏有一组带有空格的单词,如下所示。
"This is a message"
我不确定哪里出了问题。提前致谢..
您可以使用 to_jsonb()
而不是转换:
alter table table_name
alter column message type jsonb using to_jsonb(message);
如果你真的想使用json
(尽管推荐jsonb
),然后将结果转换回json类型:
alter table table_name
alter column message type json using to_jsonb(message)::json;
但是对于不包含 "real" json 值,仅包含纯字符串的列来说,这似乎很奇怪。
就我而言,我想拆分每个 n 字符都有分隔符的 varchar。例如
varchar "ab,cd,ef,gh" -> json ["ab","cd","ef","gh"]
首先,我将 varchar 转换为以逗号 (",") 分隔的数组
ALTER table my_table ALTER column my_column TYPE text[] USING string_to_array(my_column,',')
然后,将 varchar 数组转换为 json(也许您会用于 GraphQL 数据库)
ALTER table my_table ALTER column my_column TYPE json USING array_to_json(my_column)
这给了我 json(数组)的结果,例如 ["ab","cd","ef","gh"]
您好,我正在尝试将 table 中的列从 varchar 转换为 json,而 table 已经有一些字符串数据。我试着用下面的命令来做。
Database=# alter table table_name alter column message type json using
message::json;
但是命令失败并出现以下错误。
ERROR: invalid input syntax for type json
DETAIL: Token "This" is invalid.
CONTEXT: JSON data, line 1: This...
注意:消息栏有一组带有空格的单词,如下所示。
"This is a message"
我不确定哪里出了问题。提前致谢..
您可以使用 to_jsonb()
而不是转换:
alter table table_name
alter column message type jsonb using to_jsonb(message);
如果你真的想使用json
(尽管推荐jsonb
),然后将结果转换回json类型:
alter table table_name
alter column message type json using to_jsonb(message)::json;
但是对于不包含 "real" json 值,仅包含纯字符串的列来说,这似乎很奇怪。
就我而言,我想拆分每个 n 字符都有分隔符的 varchar。例如
varchar "ab,cd,ef,gh" -> json ["ab","cd","ef","gh"]
首先,我将 varchar 转换为以逗号 (",") 分隔的数组
ALTER table my_table ALTER column my_column TYPE text[] USING string_to_array(my_column,',')
然后,将 varchar 数组转换为 json(也许您会用于 GraphQL 数据库)
ALTER table my_table ALTER column my_column TYPE json USING array_to_json(my_column)
这给了我 json(数组)的结果,例如 ["ab","cd","ef","gh"]