【问题标题】:Trigger for change in date for PostgreSQL database!触发 PostgreSQL 数据库的日期更改!
【发布时间】:2011-02-08 16:50:23
【问题描述】:

我应该如何编写一个触发器,当 PostgreSQL 数据库服务器的 LocalDate 发生变化时将触发该触发器? 我想在 LocalDate(postgresql 数据库服务器的日期)更改时收到通知,这将是最有效的方法吗? 需要通知的应用程序是用 Java 编写的。

进一步说明: 我正在建设公共交通系统,我需要在每天开始时设置一天的时间表。而日期是根据数据库服务器的时间。如何以最小的开销实现这一目标?

【问题讨论】:

  • 仅在数据库更改时触发。你到底想完成什么?
  • 请参阅问题中的说明。

标签: sql database postgresql date triggers


【解决方案1】:

我唯一能想到的就是安排一个计划作业(服务器端作业)将当前日期插入表中,每天一次,例如当地时间上午 12:01。触发器可以对此做出响应。

【讨论】:

    【解决方案2】:

    没有办法只使用数据库而不定期检查。

    如果您需要在客户端应用程序中进行通知,则可以使用 LISTEN/NOTIFY。您需要配置服务器调度程序(例如 cron)以启动脚本,该脚本在 00:00 连接到服务器并发出 NOTIFY。但这需要 Java 客户端定期检查PQnotifies,这并不比仅定期检查current_date 好。

    你需要这个做什么?也许有更好的解决方案来解决您的下划线问题。


    您唯一明智的选择是在服务器上创建一个程序来执行您的日常维护并使用服务器操作系统调度程序(Unices 上的 cron,Windows 上的 Windows 任务调度程序)安排它。

    为了额外的可靠性:

    • 设置您的维护脚本以锁定一个特殊的表维护(last_maintenance date)
    • 当客户端连接到数据库时,它应该检查 current_date=last_maintenance,如果不是,则报错;
    • 如果当前维护正在运行,那么它会一直等待锁定直到完成。

    【讨论】:

    • 我正在建设公共交通系统,我需要在每天开始时设置一天的时间表。而日期是根据数据库服务器的时间。如何以最小的开销实现这一目标?
    • 虽然不是一个简洁的解决方案,但被认为是给定解决方案中最好的。
    【解决方案3】:

    什么是“本地日期”?你的意思是服务器系统日期?在这种情况下,这是不可能的,触发器会在表中的记录更改时触发。查看手册:http://www.postgresql.org/docs/current/static/plpgsql-trigger.html

    【讨论】:

    • 是的,我需要服务器系统日期更改通知。
    猜你喜欢
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多