将 JSONB 数据迁移到列
Migrate JSONB data to columns
我有一个具有以下架构的 PostgreSQL 数据库:
CREATE TABLE myrecords (data JSONB);
它有一些看起来像这样的记录:
data
---------------------------------------------
{"field1": "enabled", "field2": "disabled"}
我想将数据从 JSON blob 迁移到 SQL 列;我像这样更改了 table:
ALTER TABLE myrecords ADD COLUMN field1 BOOLEAN;
ALTER TABLE myrecords ADD COLUMN field2 BOOLEAN;
我已经设法使用 jsonb_to_record
将 JSON 对象转换为一行,但我不知道如何 (a) 转换“enabled”/“disabled”字符串文字到 BOOLEAN TRUE/FALSE 值,并且 (b) 更新行以设置新的列值。是否可以在更新行的同时从中选择数据?
你可以使用->>
然后比较结果得到一个布尔值:
update myrecords
set field1 = (data ->> 'field1') = 'enabled',
field2 = (data ->> 'field2') = 'enabled'
;
我有一个具有以下架构的 PostgreSQL 数据库:
CREATE TABLE myrecords (data JSONB);
它有一些看起来像这样的记录:
data
---------------------------------------------
{"field1": "enabled", "field2": "disabled"}
我想将数据从 JSON blob 迁移到 SQL 列;我像这样更改了 table:
ALTER TABLE myrecords ADD COLUMN field1 BOOLEAN;
ALTER TABLE myrecords ADD COLUMN field2 BOOLEAN;
我已经设法使用 jsonb_to_record
将 JSON 对象转换为一行,但我不知道如何 (a) 转换“enabled”/“disabled”字符串文字到 BOOLEAN TRUE/FALSE 值,并且 (b) 更新行以设置新的列值。是否可以在更新行的同时从中选择数据?
你可以使用->>
然后比较结果得到一个布尔值:
update myrecords
set field1 = (data ->> 'field1') = 'enabled',
field2 = (data ->> 'field2') = 'enabled'
;