在外部数据包装器中访问WHERE子句条件

时间:2016-05-17 22:54:15

标签: postgresql foreign-data-wrapper

我通过一组FDW表从键/值存储中公开数据。这一切都很好,只是当我只需要一小部分时,Postgres经常被迫扫描整个表。

例如:

  

SELECT * FROM person WHERE person_id ='WLW001';

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

在我的键/值存储区中,我只需要通过“WLW001”作为键的一部分直接找到正确的记录。

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

此外,如果SELECT语句包含参数标记,则表示我需要替换标记的值。我在哪里可以找到价值?

1 个答案:

答案 0 :(得分:0)

我在mysql_fdw项目(https://github.com/EnterpriseDB/mysql_fdw)中找到了我需要的名为deparse.c的文件。 PostgreSQL将解析一个查询并将其转换为单独的表查询。然后它将为每个不同的表调用FDW回调,每个表都有自己的WHERE条件集。可以在PostgreSQL数据结构中遍历一棵树,以获得它在该表中搜索的确切条件。