Closed sakaik closed 2 weeks ago
1807801c5415da5e61be068686138def8044412a
にて修正しました。
こちら、割と根の深い問題で、RIGHT OUTER JOINを実行する際のCPU-fallbackコードで、 JOINの条件句が式表現を含んでいたものの、それがProjectionで使われる式表現を含んでいるために、 setrefs.cでの置換ロジックで意味のない列参照(中間値を計算するためだけに領域を割り当てたスロットで、 CPU-fallbackではNULL値を置いておくだけ)に置き換えられており、それが原因でNULL値と評価され、 結果セットから消えていたというものでした。
81792828
にて、PG-Stromをオンにした場合でもオフ時と同じ件数が帰ってくること、結果の値が一致することを確認しました。
db=# SELECT pgstrom.githash();
githash
------------------------------------------
81792828fff930b838b3e4b7f33650fd97c4a3cc
参考:git log
81792828 (HEAD -> master, origin/master, origin/HEAD) documentation fix related to PostgreSQL v12
6ce56756 forget to commit v5.2 release note source document
0a76b592 documentation fix
1a5606e3 bugfix: wrong scan logic recently enbugged.
51c0b0de add delay to apply pg_strom.max_async_tasks
1807801c bugfix: CPU-fallback ExprState was not initialized correctly ←★本件修正バージョン★
dc101ba6 nvcc working directory is moved to $PGDATA/.pgstrom_fatbin_build_XXXXXX
Summary
サブクエリを含む(やや複雑な)クエリが、PG-Strom有効時に正しい結果を返さない(結果件数が少なくなる)
Data (作成クエリは末尾に)
Problems: 問題のクエリと結果
OUTER JOIN と FULL JOINのいずれも、PG-Strom有効時に結果件数が少なくなる。
OUTER JOIN
FULL JOIN
サブクエリの内側のクエリは問題ない
サブクエリの内側のクエリだけを取り出して実行した場合、PG-Strom有効でも正しい結果を得られる。
EXPLAIN: 実行計画
Version
動作確認用データ生成クエリ