gpt4 book ai didi

postgresql - 如何从 pl/pgsql 调用 DROP USER?

转载 作者:行者123 更新时间:2023-12-02 02:18:29 24 4
gpt4 key购买 nike

如何从 Pl/PgSql 调用DROP USER(参见示例)?

CREATE PROCEDURE myfunc()
LANGUAGE PLPGSQL AS
$$
DECLARE
super_users TEXT[];
ldap_users TEXT[];
u TEXT;
BEGIN
super_users := ARRAY(SELECT usename::TEXT FROM pg_catalog.pg_user WHERE usesuper);
ldap_users := ARRAY(SELECT uid::TEXT FROM ldap_users);

FOREACH u IN ARRAY ldap_users LOOP
IF (u <> 'postgres' AND u <> ALL(super_users)) THEN
DROP USER IF EXISTS u;
END IF;
END LOOP;
END;
$$;

导致错误“角色 u 不存在”...

恕我直言,PL/PGSQL 并不将 u 视为变量,而是将其视为名称。并且DROP USER...不是SQL而是某种扩展。怎么做?也许是一些系统功能?或者用特殊语法来替换 u

编辑:我的解决方案(刚刚找到):

DECLARE
stm TEXT;
...
BEGIN
...
stm := 'DROP USER IF EXISTS "' || u '"';
EXECUTE stm;
...

这似乎有效。也许还有其他解决方案?更规范?

最佳答案

您需要dynamic SQL为此:

execute format('DROP USER IF EXISTS %I', u);

关于postgresql - 如何从 pl/pgsql 调用 DROP USER?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66795694/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com