sql - 没有事件的postgresql锁定用户

标签 sql postgresql pgagent

我必须锁定前三个月没有工作的用户。 我是新手! 我看了文档,我不认为我可以通过配置来做到这一点。 (这是真的吗?) 所以我必须开发一个日常程序(使用 pgagent?),进行查询然后锁定用户,但我找不到包含此信息的系统表。 你可以帮帮我吗? 多谢 吉安

最佳答案

没错,上次登录的时间没有记录在数据库中,只记录在日志文件中(如果日志配置适当的话)。

我认为如果没有使用 PostgreSQL 的应用程序的帮助,您将无法实现这一点。我可以想到两种可能性:

  • 创建一个表,您的应用程序在其中记录上次登录时间。然后,您的定期作业可以使用该表来决定是否应该锁定用户。

  • 像这样创建一个函数:

    CREATE OR REPLACE FUNCTION expire_me() RETURNS void
       LANGUAGE plpgsql SECURITY DEFINER
       SET search_path = 'pg_catalog' AS
    $$BEGIN
       EXECUTE 'ALTER ROLE ' || session_user || ' VALID UNTIL ''' ||
               (current_timestamp + INTERVAL '3 months') || '''';
    END;$$;
    

    应用程序会在用户登录后立即调用该函数。如果下一次登录时间超过三个月,则用户将被锁定。

不幸的是,PostgreSQL 没有“登录触发器”这样的东西,这会让事情变得简单得多。

关于sql - 没有事件的postgresql锁定用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41889740/

相关文章:

sql - 如何使用 "where"子句在 SQLite 查询中转义下划线

linux - pgagent 的 systemd 单元

c# - SQL SELECT * FROM XXX WHERE 数组中的列名

mysql - 查找重复值

Mysql SELECT COUNT(COLUMN) 带条件

sql - 如何在 PostgreSQL 中使用 DISTINCT 加速查询?

javascript - knexjs 和 postgres : whereRaw within a join

sql - PostgreSQL,拆分为行并识别第一部分

postgresql - pgAdmin:作业选项不可见