我一直在使用Postgres将JSON对象存储为字符串,现在我想利用PG的内置json
和jsonb
类型来更有效地存储对象
基本上,我想解析字符串化的JSON并将其放在PG内的json
列中,而不必诉诸于将所有值读入Python并在那里解析它们。
理想情况下,我的迁移应该如下所示:
UPDATE table_name SET json_column=parse_json(string_column);
我看了Postgres's JSON functions,似乎并没有这样做的方法,即使它看起来很微不足道。为了记录,我的JSON对象只是一维的字符串数组。
有没有办法做到这一点?
答案 0 :(得分:4)
不需要parse_json
列,只需更改列的类型:
ALTER TABLE table_name
ALTER COLUMN json_column TYPE json USING json_column::json;
请注意,如果您计划对这些值执行大量JSON操作(即从对象中提取元素,修改对象等),最好使用jsonb
。 json
只应用于存储JSON数据。此外,正如Laurenz Albe指出的那样,如果您不需要对这些值执行任何JSON操作,并且您对postgresql可以对它们执行的验证不感兴趣(例如,因为您相信源始终提供有效的JSON ),然后使用text
是一个完全有效的选项(或bytea
)。