3

我通过一组 FDW 表从键/值存储中公开数据。除了当我只需要一个小子集时,Postgres 经常被迫扫描整个表之外,一切都很好。

例如:

SELECT * FROM person WHERE person_id='WLW001';

除非我将 LIMIT 1 添加到末尾,否则它将搜索所有人员行。

在我的键/值存储中,我只需将“WLW001”作为键的一部分传递即可直接找到正确的记录。

换句话说,我需要找到 WHERE 子句条件来优化我对键/值存储的查询。我浏览了许多示例 FDW 和文档,找不到任何描述使用 RelOptInfo 或 scan_clauses 列表或帮助函数来获取此信息的内容。

此外,如果 SELECT 语句包含参数标记,我似乎需要用该值替换标记。我在哪里找到价值?

4

1 回答 1

0

I found what I needed in the mysql_fdw project (https://github.com/EnterpriseDB/mysql_fdw) in a file named deparse.c. PostgreSQL will parse a query and turn it into individual table queries. Then it will call the FDW callbacks for each different table, each with its own set of WHERE conditions. It is possible to walk a tree in the PostgreSQL data structures to obtain the exact conditions it is searching for within that table.

于 2016-05-24T13:35:23.657 回答