我有一个包含两个关键列的表,即用户和隐私。我的想法是编写表视图以参考相关列来查询我的表。
我想要一个包含以下条件的表视图:
user=current_user()AND privacy = "TRUE"
+ user!=current_user() AND privacy="FALSE"
所以我想要的是视图显示current_users和私有条目以及那些未切换到私有条目的条目。
这样做的最佳方法是什么。是if else语句还是where参数有效?
答案 0 :(得分:0)
如果我说得对,用户应该看到自己的条目和其他人的条目。未标记为私人的条目。
根据表格(将user
更改为usr
,因为它是保留的关键字:
db=# create table entries(id serial, message text, usr text, is_private boolean);
CREATE TABLE
以下测试数据:
db=# insert into entries(message, usr, is_private) values
('postgres private entry', 'postgres', true),
('postgres public entry', 'postgres', false),
('test private entry', 'test', true),
('test public entry', 'test', false);
INSERT 0 4
您可以按如下方式定义视图:
db=# create view entries_v as
select * from entries
where usr = current_user or not is_private;
CREATE VIEW
postgres
看到了什么:
db=# \c - postgres
You are now connected to database "db" as user "postgres".
db=# select * from entries_v;
id | message | usr | is_private
----+------------------------+----------+------------
1 | postgres private entry | postgres | t
2 | postgres public entry | postgres | f
4 | test public entry | test | f
(3 rows)
现在test
:
db=# \c - test
You are now connected to database "db" as user "test".
db=> select * from entries_v;
id | message | usr | is_private
----+-----------------------+----------+------------
2 | postgres public entry | postgres | f
3 | test private entry | test | t
4 | test public entry | test | f
(3 rows)