小编Ale*_*lex的帖子

PostgreSQL 9.3.13,如何刷新不同用户的物化视图?

[我认为这个问题的根本原因是我不了解权限和特权......]

所以,为了设置舞台,我的设置是一个数据库,称之为MyDb

我有两个用户,spu1u1spu1是超级用户,u1是“普通”用户。MyDb的所有者是spu1。我想我还应该说u1具有从组角色继承的创建数据库和创建角色权限。

我有一个架构sch1,它是一个用户定义的架构。

在这个模式中,我有一个表,称为tbl1,还有一个物化视图,称为mvw1

TBL1的主人是SPU1,该mvw1的主人是U1


问题:

在当前设置中,如上所述,我无法将mvw1刷新为u1spu1。我只是得到以下有趣的错误(我已经广泛搜索了它,但没有找到任何可以完全解决我的设置的错误......)。

ERROR:  permission denied for relation tbl1
********** Error **********

ERROR: permission denied for relation tbl1
SQL state: 42501
Run Code Online (Sandbox Code Playgroud)

我发现

  1. 更改所有者mvw1SPU1,让我刷新为SPU1
  2. 运行下面的命令允许我将mvw1刷新为u1

我试图找出我需要授予普通用户u1缺少的权限(理想情况下所需的最低权限),以便我可以在以他们的身份登录时刷新此视图。

第一个选项虽然很高兴知道,但并不能解决我的问题。第二个选项似乎实际上是在向非超级用户授予超级用户权限,或者授予比我需要的更大的权限。

如果有人可以向我解释这里到底发生了什么(或指出我在解决问题所需的描述中遗漏了哪些信息),并让我知道我的第二个选择是否真的可行或更好的选择? …

postgresql permissions materialized-view errors postgresql-9.3

12
推荐指数
3
解决办法
1万
查看次数

案例语法之间的结果差异

我一直在玩 CASE 语法,并注意到以下我不完全理解的行为差异。

鉴于以下查询

DECLARE @Value1 INT 

SELECT 
    'Col1' = CASE WHEN @Value1 IS NULL THEN 'Yay'
    ELSE 'Oh'
    END
    ,'Col2' = CASE @Value1 WHEN NULL THEN 'Yay'
    ELSE 'Oh'
    END
    ,'Val' = @Value1
Run Code Online (Sandbox Code Playgroud)

我得到的结果集是这样的:

列 1 | Col2 | 瓦尔

耶 | 哦| 空值

我原以为他们会返回相同的结果。有人会很乐意解释这里发生了什么吗?

sql-server sql-server-2016

3
推荐指数
1
解决办法
120
查看次数