これはPGroonga 2.X and 3.X用のドキュメントです。古いPGroongaを使っているならPGroonga 1.xのドキュメントを見てください。

pgroonga_result_to_jsonb_objects関数

2.3.0で追加。

概要

pgroonga_result_to_jsonb_objects関数はpgroonga_result_to_recordset関数と似ています

pgroonga_result_to_jsonb_objects関数はpgroonga_command関数の結果のJSONをオブジェクトの配列のjsonbデータに変換します。変換されたjsonbデータはPostgreSQLのjsonb_array_elements関数を使うとjsonbのオブジェクトの集合に変換できます。一般的に、変換語のjsonbデータのほうが結果のJSONよりも扱いやすいです。

将来的にはGroongaのコマンドのすべての結果JSONフォーマットをサポートする予定ですが、現時点では次のコマンドだけサポートしています。

構文

この関数の構文は次の通りです。

jsonb pgroonga_result_to_jsonb_objects(result)

resultjsonb型の値です。pgroonga_command関数の結果のtextjsonbにキャストすればこの関数に渡せます。

使い方

サンプルスキーマとデータは次の通りです。

CREATE TABLE memos (
  content text
);

CREATE INDEX pgroonga_memos_index
          ON memos
       USING pgroonga (content);

INSERT INTO memos VALUES ('PGroonga (PostgreSQL+Groonga) is great!');
INSERT INTO memos VALUES ('Groonga is an embeddable full text search engine.');

以下はjsonbデータを返す例です。

SELECT jsonb_pretty(
  pgroonga_result_to_jsonb_objects(
    pgroonga_command(
      'select',
      ARRAY[
        'table', pgroonga_table_name('pgroonga_memos_index')
      ]
    )::jsonb
  )
);
--                               jsonb_pretty                              
-- ------------------------------------------------------------------------
--  [                                                                     +
--      {                                                                 +
--          "_id": 1,                                                     +
--          "_key": 1,                                                    +
--          "content": "PGroonga (PostgreSQL+Groonga) is great!"          +
--      },                                                                +
--      {                                                                 +
--          "_id": 2,                                                     +
--          "_key": 2,                                                    +
--          "content": "Groonga is an embeddable full text search engine."+
--      }                                                                 +
--  ]
-- (1 row)

PostgreSQLのjsonb_array_elements関数を使うと変換後のjsonbデータをjosnbのオブジェクトの集合に変換できます。

SELECT jsonb_array_elements(
  pgroonga_result_to_jsonb_objects(
    pgroonga_command(
      'select',
      ARRAY[
        'table', pgroonga_table_name('pgroonga_memos_index')
      ]
    )::jsonb
  )
);
--                                  jsonb_array_elements                                  
-- ---------------------------------------------------------------------------------------
--  {"_id": 1, "_key": 1, "content": "PGroonga (PostgreSQL+Groonga) is great!"}
--  {"_id": 2, "_key": 2, "content": "Groonga is an embeddable full text search engine."}
-- (2 rows)

参考