使用规则修改Postgres SQL查询

时间:2015-10-29 21:07:01

标签: sql database postgresql views rules

我正在尝试确定是否可以为Postgres编写规则以在运行时动态更改查询。

基本上,我有一个多租户解决方案,它使用映射表来确定某个行是否由租户拥有。为了便于阅读,我简化了以下示例。

在这些示例中,“car”表由carmapping表限定为特定租户,该表具有指向scoped_model_id表和car指向的外键scoping_model_pk在租户/客户/任何通常被视为“范围模型”的模型,用于范围应用程序中的各种表格。

示例范围查询:

SELECT "car"."id" FROM "car" WHERE 
("car"."id" IN (SELECT U0."scoped_model_id" FROM "carmapping" U0 WHERE U0."scoping_model_pk" IN (1));

原始查询:

SELECT "car"."id" FROM "car";

有没有办法使用规则动态添加这些WHERE子句? 它需要能够确定当前请求中scoping_model_pk处于活动状态 - 是否将其作为所有数据库游标连接的附加元数据传递给Postgres,或者以某种方式作为noop字符串嵌入到SQL语句本身中。并且还需要确定SELECT语句当前所针对的模型的映射表 - 在本例中为carmapping

我们可以在ORM中的应用程序级别轻松地执行此操作,但最好在数据库级别进行一致性(因为我们有一些代码不使用ORM而不想记住更新任何原始SQL代码)。

0 个答案:

没有答案