我试图理解将 PostgreSQL 函数标记为 LEAKPROOF 的含义。假设我们有一个(单租户)Web 应用程序设置,即浏览器 -> 服务器(Django、Rails 等) -> PostgreSQL。服务器是唯一可以访问 PostgreSQL 的服务器,也是唯一可以添加运行查询、执行函数等的服务器。
服务器尝试查询公共模式中名为 的表foo
。该表只是一个主键id
和一个jsonb
字段 ,bar
包含 100,000 行。该jsonb
字段上有一个 GIN 索引。当未应用行级安全性时,任何使用 GIN 索引->
的查询都可以。bar
但是,当应用行级安全性时,行级安全性会强制进行顺序扫描。这是一个已知的“问题”,如此处、此处等所述。
在阅读了 PostgreSQL 文档和大量帖子后,我很难看到jsonb
用 LEAKPROOF 等效项覆盖过滤器操作的风险。我知道文档说它可能“泄漏”信息,但在单个租户设置中,它会将信息泄漏给谁?服务器可以过滤掉发送给客户端的任何错误消息,并且服务器本身是受信任的实体。