如何根据用户查询数据在视图中设置动态“位置”?

时间:2019-08-14 16:45:27

标签: postgresql view parameters

我需要创建一组视图,其中具有选择权限的数据库用户将在其中查询数据,但是我想创建一个通用视图,因此,如果其他用户要查询相同的数据,则无需创建根据他们的“ user_id”获得更多观看次数。一个例子是:

CREATE OR REPLACE VIEW user_data AS SELECT * FROM users JOIN something WHERE user_id = ?

是否有任何方法可以设置,如果查询数据的数据库用户是“ db_user1”,则具有上述选择的视图将使用1作为user_id进行查询?并且如果数据库用户是db_user2,那么where user_id会被设置为2?

1 个答案:

答案 0 :(得分:0)

对于此特定用例,您可以执行以下操作:

create or replace view user_data AS 
  select * from users 
  where user_id = (select substring(current_user, length(current_user))::int);

但是,如果用户名不以可以转换为int的名称结尾,则会返回错误。

您可能想了解行级安全性,以寻求更可靠和可配置的功能。