小编Pas*_*cal的帖子

Postgres、RDW、WHERE 条件未推送到远程(JSONB 属性,使用 postgres_rdw)

我有一个使用 RDW 的远程 postgres 表。它包含一个 JSONB 列,我使用该 JSONB 中的值作为条件WHERE

远程表在 JSONB 列上有一个 GIN 索引,在hostname我用于过滤的 -attribute 上有一个索引。

EXPLAIN ANALYZE VERBOSE
SELECT 
* 
FROM forein_table
WHERE details->>'hostname' = 'host-xyz'
Run Code Online (Sandbox Code Playgroud)

显示“远程 SQL”不包含-WHERE子句,并且过滤是在本地完成的。另一方面

EXPLAIN ANALYZE VERBOSE
SELECT 
* 
FROM forein_table
WHERE details@> '{"hostname": "host-xyz"}'
Run Code Online (Sandbox Code Playgroud)

发送“WHERE”子句,这显然要快得多。

文档说:

WHERE 子句不会发送到远程服务器,除非它们仅使用内置数据类型、运算符和函数。子句中的运算符和函数也必须是 IMMUTABLE。

->>和之间有区别吗@>

有没有办法在远程表上使用WHERE details->>'hostname' = 'host-xyz'并让它下推子句WHERE

(我找到了一种方法,通过创建将属性VIEW提取hostname为列,然后在此视图上创建远程表......但显然这不是一种非常灵活/优雅的方法)

postgresql postgresql-fdw

5
推荐指数
1
解决办法
284
查看次数

标签 统计

postgresql ×1

postgresql-fdw ×1