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

pgroonga_result_to_recordset関数

2.3.0で追加。

概要

pgroonga_result_to_recordset function is similar to pgroonga_result_to_jsonb_objects function.

pgroonga_result_to_recordset関数はpgroonga_command関数の結果のJSONをrecord型の集合に変換します。この関数はPostgreSQLのjsonb_to_recordset関数に似ています。通常、record型の集合の方が結果のJSONよりも扱いやすいです。

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

構文

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

setof record pgroonga_result_to_recordset(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.');

以下はrecordの集合を返す例です。

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

カラム名とカラムの型をASで指定することでFROMでこの結果レコードの集合を使うことができます。

SELECT *
  FROM pgroonga_result_to_recordset(
         pgroonga_command(
           'select',
           ARRAY[
             'table', pgroonga_table_name('pgroonga_memos_index')
           ]
         )::jsonb
       ) AS record(
         _id bigint,
         _key bigint,
         content text
       );
--  _id | _key |                      content                      
-- -----+------+---------------------------------------------------
--    1 |    1 | PGroonga (PostgreSQL+Groonga) is great!
--    2 |    2 | Groonga is an embeddable full text search engine.
-- (2 rows)

参考