在 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"]