Return postgres 全文搜索查询中排名的全精度

Return full preciscion of rank in postgres fulltext search query

我在使用延迟加载加载更多行的上下文中使用 postgres 全文搜索。因此,我正在 returning 元素的排名和 ID returned 并尝试搜索 (rank, id) < (last_rank, last_id).不幸的是,postgres 似乎比 select 中的 return 具有更大的排名内部表示。例如,比较这两个查询

SELECT posts.id, ts_rank((textsearch || aux_textsearch), websearch_to_tsquery('en', 'test')) FROM posts WHERE posts.id = 'c2459b96-35af-41a7-ad08-11f4e8239c71' AND (ts_rank((textsearch || aux_textsearch), websearch_to_tsquery('en', 'test')), posts.id) < (.6079271, 'c2459b96-35af-41a7-ad08-11f4e8239c71') ;

这个returns

                  id                  |  ts_rank
--------------------------------------+-----------
 c2459b96-35af-41a7-ad08-11f4e8239c71 | 0.6079271

但是,如果我用实际计算的排名替换显式给定的排名,它不会像预期的那样给出结果。

SELECT posts.id, ts_rank((textsearch || aux_textsearch), websearch_to_tsquery('en', 'test')) FROM posts WHERE posts.id = 'c2459b96-35af-41a7-ad08-11f4e8239c71' AND (ts_rank((textsearch || aux_textsearch), websearch_to_tsquery('en', 'test')), posts.id) < (ts_rank((textsearch || aux_textsearch), websearch_to_tsquery('en', 'test')), 'c2459b96-35af-41a7-ad08-11f4e8239c71') ;

如何让 postgres 达到 return 用于计算排名的完整精度?还是我应该接受超过某个点的数字无关紧要并使用舍入函数(从而放弃超过该点的任何订购信息)?如果我四舍五入,我应该将排名设置为哪种数据类型?数字?重要吗?

我认为问题在于常量被隐含地视为“双精度”,而 ts_rank returns 是“实数”。如果你把常量写成 0.6079271::real 那么它应该做你想做的;