在psql中将列varchar更改为json
您好,我正在尝试将表中的一列从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
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,对于无效的数据,我将忽略。但是我需要这些数据供将来参考,所以我不想删除它。谢谢你的解决方案。我不想删除该列并重新创建它。我需要旧数据存在,即使它无效,此命令工作完美感谢解决方案。我不想删除该列并重新创建它。我需要旧的数据存在,即使它无效,这个命令工作得很好