下記のようなテーブル
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]
やったぜ大勝利🍣