我想将drop
特定数据库的特定架构中的所有表和函数(不仅是用户拥有的表和函数)的权限授予特定角色。但是,GRANT ALL PRIVILEGES
这还不够,我没有找到如何在不将角色设为超级用户的情况下进行操作 - 超级用户对同一服务器上的其他数据库拥有权限,这不是我想要的。我不介意仅限于特定数据库的超级用户权限,但我不知道该怎么做。
我的代码:
CREATE USER _administrator PASSWORD 'pwd12345';
CREATE ROLE administrator NOLOGIN ADMIN _administrator;
GRANT ALL PRIVILEGES ON DATABASE "myDB" TO administrator;
GRANT ALL PRIVILEGES ON SCHEMA public TO administrator;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO administrator;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO administrator;
GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public TO administrator;
Run Code Online (Sandbox Code Playgroud)
administrator
是myDB
数据库管理员组,_administrator
是我的客户端应用程序能够以身份登录的最强大的角色。
我错过了什么或做错了什么?
我的函数中几乎没有 FOREACH 循环。这些循环似乎与官方 postgresql 文档完全一致。返回此错误消息:
ERROR: loop variable of FOREACH must be a known variable or list of variables
SQL state: 42601
Run Code Online (Sandbox Code Playgroud)
谷歌没有找到任何关于postgresql "loop variable of FOREACH"
. 我以某种方式为我的旧 foreach 循环解决了这个问题,但我不记得如何解决,并且我找不到任何对于解决此错误可能重要的差异。
我在 Windows XP 32 位上有 PostgreSQL 9.3.4 和 pgAdmin III 1.18.1。以下是函数中有趣的部分:
CREATE OR REPLACE FUNCTION vloz_kont() RETURNS trigger AS $$
DECLARE
_idmat integer;
_nazmat text;
_zast text;
sj_nad text;
...
BEGIN
...
--bugged loop
FOREACH _mat IN ARRAY NEW._material::text[] LOOP
SELECT split_part( _mat, ' ', 1 …
Run Code Online (Sandbox Code Playgroud) 我创建了一个视图和一个 INSTEAD OF 触发器,用于从该视图中插入/更新/删除。现在我尝试向视图中插入一些数据,PostgreSQL 返回以下错误(捷克语翻译:“chyba”=“error”,“Stav SQL”=“SQL state”):
ERROR: cannot insert into view "ukaz_lok"
DETAIL: Views that return columns that are not columns of their base relation are not automatically updatable.
HINT: To enable inserting into the view, provide an INSTEAD OF INSERT trigger or an unconditional ON INSERT DO INSTEAD rule.
********** Chyba **********
ERROR: cannot insert into view "ukaz_lok"
Stav SQL: 55000
Run Code Online (Sandbox Code Playgroud)
这发生在其他一些 INSTEAD OF 触发器之前 - 这个错误只持续了一段时间(几个小时?我不记得了)然后 PostgreSQL 找到了触发器。我尝试了各种事情(更改触发器,删除所有触发器和视图并重新创建它们等),但我不确定什么有效,只是有些东西有效。那么究竟如何让 PostgreSQL 识别触发器呢?
我在 Windows XP 32 位上有 PostgreSQL …
我尝试在 Windows XP 32 位和 Visual Studio 2010 上通过 @PavelStehule(Erwin Brandstetter在这个答案中向我推荐它)构建plpgsql_check 扩展(我将本文用作手册)。但是,我收到以下错误:
error LNK2001: unresolved external symbol _exec_get_datum_type
error LNK2001: unresolved external symbol _plpgsql_compile
error LNK2001: unresolved external symbol _plpgsql_build_datatype
error LNK2001: unresolved external symbol _plpgsql_stmt_typename
error LNK2001: unresolved external symbol _plpgsql_parser_setup
Run Code Online (Sandbox Code Playgroud)
此外,还有两个 IntelliSense 错误:expected a ')'
在 plpgsql.h(第 923 行和第 953 行 - 都在与数据相关的函数中) - 我希望这些是错误警报(如果它们很重要,如何解决它们?)。
经过一番谷歌搜索后,我发现有人在 OS X 上遇到了类似的问题。问题是 plpgsql.so 要么没有链接,要么没有工作。我的电脑上没有 plpgsql.so,但我有 plpgsql.dll 应该对应它。所以我链接了它,错误改变了:
error LNK1107: invalid or corrupt …
Run Code Online (Sandbox Code Playgroud) 如何在 PostgreSQL 中打补丁?我找到了一个建议,但它似乎只适用于 *NIX。我的 PostgreSQL(9.3.1 编辑:9.3.4 现在)是从 Windows XP(32 位)上的 exe 安装程序安装的,所以我没有在建议中找到我的案例。
我现在不是在谈论次要版本升级 - 我可以通过 Stack Builder 下载安装程序,并且已经有一个关于如何处理它的很好回答的问题。但是,如果我需要一些无法通过 StackBuilder 获得的东西,或者甚至没有可执行安装程序(在我的情况下,仅在 .patch 文件中分发的补丁),我该怎么办?
postgresql ×5
installation ×2
plpgsql ×2
windows ×2
permissions ×1
trigger ×1
upgrade ×1
view ×1