在psql中将列varchar更改为json

在psql中将列varchar更改为json,json,postgresql,ddl,sqldatatypes,Json,Postgresql,Ddl,Sqldatatypes,您好,我正在尝试将表中的一列从varchar转换为json,并且表中已经有一些字符串数据。我试着用下面的命令来做 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 d

您好,我正在尝试将表中的一列从varchar转换为json,并且表中已经有一些字符串数据。我试着用下面的命令来做

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...
注意:message列中有一组带空格的单词,如下所示

"This is a message"
我不确定出了什么问题。提前感谢。

您可以使用来制作而不是铸造:

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;
但对于一个不包含真正json值,只包含普通字符串的列来说,这似乎很奇怪

您可以使用来_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;

但对于一个不包含真正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)

这给了我一个jsonarray的结果,比如[ab,cd,ef,gh]

在我的例子中,我想拆分每个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)

这给了我一个jsonarray的结果,比如[ab,cd,ef,gh]

如果您的列不包含有效的JSON,那么您为什么要转换它?我只是不想删除该列并重新创建它。键入JSONB USING touJSONMessage::JSONB;上面的命令没有任何错误。问题是:如果列当前不包含有效的JSON数据,那么为什么要转换它呢?更改表后,我将向列中添加有效的JSON,对于无效的数据,我将忽略。但是我需要这些数据以备将来参考,所以我不想删除它。如果您的列不包含有效的JSON,那么您为什么要转换它?我只是不想删除该列并重新创建它。键入JSONB USING touJSONMessage::JSONB;上面的命令没有任何错误。问题是:如果列当前不包含有效的JSON数据,那么为什么要转换它呢?更改表后,我将向列中添加有效的JSON,对于无效的数据,我将忽略。但是我需要这些数据供将来参考,所以我不想删除它。谢谢你的解决方案。我不想删除该列并重新创建它。我需要旧数据存在,即使它无效,此命令工作完美感谢解决方案。我不想删除该列并重新创建它。我需要旧的数据存在,即使它无效,这个命令工作得很好