LoginSignup
0
0

More than 5 years have passed since last update.

pgroongaでレコードを更新するとgroongaインデクスには多重で登録されてるくさい(解決しました。

Last updated at Posted at 2018-03-06

下記のようなテーブル

CREATE TABLE "test_data" (
    "id" serial NOT NULL PRIMARY KEY,
    "some_value" integer NOT NULL,
    "some_flg" boolean NOT NULL
);
CREATE INDEX "pgroonga_test_index" ON "test_data" USING pgroonga ("id","some_value","some_flg");

下記のようなレコードを登録する

INSERT INTO test_data VALUES(1,1,'t');
INSERT INTO test_data VALUES(2,2,'f');
INSERT INTO test_data VALUES(5,5,'f');

とりあえずSELECT

SELECT pgroonga_command('select テーブル名 --output_columns _id,id,some_flg ');

結果は下記

[1,1,true],[2,2,false],[3,5,false]

ここでbooleanをUPDATEする

UPDATE test_data SET some_flg='t';

すると結果は

SELECT pgroonga_command('select テーブル名 --output_columns _id,id,some_flg ');
[1,1,true],[2,2,false],[3,5,false],[4,2,true],[5,5,true]

booleanがだめなのかなとおもったけど

UPDATE test_data SET some_value=999;
SELECT pgroonga_command('select テーブル名 --output_columns _id,id,some_value');
[1,1,1],[2,2,2],[3,5,5],[4,2,2],[5,5,5],[6,1,999],[7,2,999],[8,5,999]

intでも同様
おそらくpgroongaでレコードがUPDATEされたときに
{"id":1,"some_value":999,"some_flg":1}
でloadされてて_idが指定されてないのかな?
UPDATEのたびに
drilldownの結果がどんどんずれていくでござる。

以下追記

SELECT pgroonga_command('select  テーブル名 --output_columns _id,id,some_value --query id:1);
[1,1,1],[6,1,999]

こんな感じでid=1のレコードが重複していたのが

--filter "pgroonga_tuple_is_alive(ctid)"'

をくわえることで解決しました。

SELECT pgroonga_command('select  テーブル名 --output_columns _id,id,some_value --query id:1 --filter "pgroonga_tuple_is_alive(ctid)"');
[6,1,999]

やったぜ大勝利🍣

0
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0