您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在postgresql中,“数据库”和“关系”有什么区别?(“错误关系x不存在”,“错误数据库x已经存在”)

在postgresql中,“数据库”和“关系”有什么区别?(“错误关系x不存在”,“错误数据库x已经存在”)

我的猜测是您真的想递归访问数据库中每个关系(表和视图)GRANTSELECT权限angel_research_production。正确的?

如果是这样,在Postgresql 9.0及更高版本中,您具有:

GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
    [, ...] | ALL [ PRIVILEGES ] }
    ON { [ TABLE ] table_name [, ...]
         | ALL TABLES IN SCHEMA schema_name [, ...] }
    TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]

来自GRANT手册。请注意该ALL TABLES IN SCHEMA条款。用法

GRANT SELECT ON ALL TABLES IN SCHEMA public TO angel_research;

如果所有用户定义的对象都在public 架构中(请参见下文),则可以解决问题。

在以前的版本中没有这种功能,但是用户定义的功能作为解决方法存在

Pg 9.0还具有ALTER DEFAULT PRIVILEGES,它更改了分配给 新创建 对象的 特权。它不会影响现有对象。 __

如TokenMacGuy所述,关系是表或视图,而不是数据库

GRANT SELECT ON angel_research_production TO angel_research;

可以看作是以下内容的简写:

GRANT SELECT ON TABLE angel_research_production TO angel_research
                ^^^^^

并且该表(关系)不存在,因此您收到了上面报告的错误

GRANT手册psql \h GRANT输出中,您将看到:

GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] }
    ON DATABASE database_name [, ...]
    TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]

这表明,你可以将权限GRANT数据库CREATECONNECTTEMPORARYSELECT数据库没有权限

Pg有四个组织级别:

集群-由邮政局长控制,接受一个给定的IP /端口组合连接,包含一个或多个 数据库包括内置template0template1postgres数据库。由postgresql.conf和控制pg_hba.conf数据库集群通常是由安装程序或软件包为您创建的。不要与作为计算群集的群集的正常含义或通用的英语含义混淆。

数据库-包含一个或多个 图式模式 。当您连接到Pg时,您将连接到特定的数据库

模式-包含 对象( 包括 关系) 。如果没有另外指定,则用户创建的所有内容都将进入public架构。查询可以显式引用多个模式中的对象,也可以通过search_path隐式地引用对象。

对象-某种程度上特定于Postgresql,模式中存在的任何内容包括关系)。

关系-外观和行为类似于表,视图表的事物

其他对象也驻留在模式中,例如函数,强制类型转换,索引,序列,运算符,集合等。

SQLServer 2022/1/1 18:30:43 有507人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶