将 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'
;