我通过一组FDW表从键/值存储中公开数据。这一切都很好,只是当我只需要一小部分时,Postgres经常被迫扫描整个表。
例如:
SELECT * FROM person WHERE person_id ='WLW001';
除非我将LIMIT 1添加到最后,否则它将搜索所有人行。
在我的键/值存储区中,我只需要通过“WLW001”作为键的一部分直接找到正确的记录。
换句话说,我需要找到WHERE子句条件来优化我的查询到键/值存储。我查看了许多示例FDW和文档,并且找不到任何描述使用RelOptInfo或scan_clauses列表或帮助函数来获取此信息的内容。
此外,如果SELECT语句包含参数标记,则表示我需要替换标记的值。我在哪里可以找到价值?
答案 0 :(得分:0)
我在mysql_fdw项目(https://github.com/EnterpriseDB/mysql_fdw)中找到了我需要的名为deparse.c的文件。 PostgreSQL将解析一个查询并将其转换为单独的表查询。然后它将为每个不同的表调用FDW回调,每个表都有自己的WHERE条件集。可以在PostgreSQL数据结构中遍历一棵树,以获得它在该表中搜索的确切条件。