将 psql 中的列 varchar 更改为 json

Mur*_*har 6 postgresql ddl json sqldatatypes

您好,我正在尝试将表中的列从 varchar 转换为 json,并且该表已经有一些字符串数据。我尝试使用以下命令执行此操作。

Database=# alter table table_name alter column message type json using
message::json;
Run Code Online (Sandbox Code Playgroud)

但该命令失败并出现以下错误。

ERROR:  invalid input syntax for type json
DETAIL:  Token "This" is invalid.
CONTEXT:  JSON data, line 1: This...
Run Code Online (Sandbox Code Playgroud)

注意:消息栏有一组带有空格的单词,如下所示。

"This is a message"
Run Code Online (Sandbox Code Playgroud)

我不确定出了什么问题。提前致谢..

小智 15

您可以使用to_jsonb()而不是强制转换:

alter table table_name 
  alter column message type jsonb using to_jsonb(message);
Run Code Online (Sandbox Code Playgroud)

如果你确实想使用json(尽管jsonb推荐),那么将结果转换回 json 类型:

alter table table_name 
  alter column message type json using to_jsonb(message)::json;
Run Code Online (Sandbox Code Playgroud)

但对于不包含“真实”json 值、仅包含纯字符串的列来说,这似乎相当奇怪。