代码之家  ›  专栏  ›  技术社区  ›  Mateusz Urbański

postgresql-将数据从jsonb数组移动到单独的表中

  •  2
  • Mateusz Urbański  · 技术社区  · 8 年前

    在我的postgresql数据库中,我有以下架构:

    CREATE TABLE slides (
        id integer,
        question jsonb DEFAULT '{}'::jsonb
    );
    
    CREATE TABLE suggestions (
        id integer,
        slide_id integer,
        suggestion_text text
    );
    
    
    INSERT INTO slides (id, question)
      VALUES (1, '{"suggestions": ["Suggestion 1", "Suggestion 2"]}');
    

    现在我想搬家 question->>'suggestions' 到A suggestions 表。所以

    SELECT * FROM suggestions; 应返回:

    ------------------------------------------------------------------
    id     | suggestion_test   | slide_id
    ------------------------------------------------------------------
    1      | Suggestion 1      | 1     
    2      | Suggestion 2      | 1   
    

    在PostgreSQL中如何做到这一点?这是一个你可以尝试的数字小提琴: https://www.db-fiddle.com/f/oEQf7ntttV5Wu9wyiXbEFk/0

    2 回复  |  直到 8 年前
        1
  •  2
  •   klin    8 年前

    我想这个专栏 suggestions.id 应该是 serial :

    CREATE TABLE suggestions (
        id serial,
        slide_id integer,
        suggestion_text text
    );
    

    使用函数 jsonb_array_elements_text() .

    insert into suggestions(slide_id, suggestion_text)
    select 
        id as slide_id, 
        value as suggestion_text
    from slides
    cross join jsonb_array_elements_text(question->'suggestions');
    

    DbFiddle.

        2
  •  2
  •   Gordon Linoff    8 年前

    你可以使用 jsonb_array_elements() :

    select jsonb_array_elements(question->'suggestions')
    from slides;