当前位置: 首页 > 面试题库 >

在启动时导入PostgreSQL触发器。hibernate

徐新荣
2023-03-14
问题内容

我在PostgreSQL中有一些存储的函数和触发器。例如:

CREATE OR REPLACE FUNCTION log_function() RETURNS TRIGGER AS $logger$
BEGIN
    IF (TG_OP = 'DELETE') THEN
        INSERT INTO logger SELECT 'D', now(), user, OLD.*;
        RETURN OLD;
    END IF;
    RETURN NULL; 
END;
$logger$ LANGUAGE plpgsql;

并触发:

CREATE TRIGGER logging_trigger
AFTER INSERT OR UPDATE OR DELETE ON some_entity
    FOR EACH ROW EXECUTE PROCEDURE log_function();

我想在每次部署后导入此代码。(我有<property name="hibernate.hbm2ddl.auto" value="create- drop"/>

我认为对于函数来说这是不可能的,因为它具有plpgsql,但是对于触发器来说则是很棒的。我一直在尝试将触发器添加到import.sql,但是我已经org.postgresql.util.PSQLException: ERROR: syntax error at end of input

而且我不想将此代码移至Java级别。

有任何想法吗?


问题答案:

创建一个@Startup@SingletonEJB,并在调用该@PostConstruct方法的方法时调用所需的过程。您不能直接从SQL调用它,因为它是一个触发过程,但是您可以:

  • INSERTUPDATEDELETE连续some_entity触发扳机;或更明智

  • 定义一个单独的过程,其名称类似于log_startup返回的内容,void因此可以从SQL中将其调用为SELECT log_startup(),并具有以下内容:

      INSERT INTO logger SELECT 'S', now(), user, NULL;
    

管他呢。

您可以log_startup使用诸如此类的本机查询进行调用SELECT log_startup(),并且还应该可以使用JDBC或HQL存储过程调用语法{call log_startup()}(未经测试)。

你根本无法直接调用触发程序,所以 没有办法,准确的功能 上部署运行。



 类似资料:
  • PostgreSQL 触发器是数据库的回调函数,它会在指定的数据库事件发生时自动执行/调用。 下面是关于 PostgreSQL 触发器几个比较重要的点: PostgreSQL 触发器可以在下面几种情况下触发: 在执行操作之前(在检查约束并尝试插入、更新或删除之前)。 在执行操作之后(在检查约束并插入、更新或删除完成之后)。 更新操作(在对一个视图进行插入、更新、删除时)。 触发器的 FOR EAC

  • 我如何暂停我的石英触发器,并在第二天在其指定的开始时间开始它?为(如)。我的cron表达式是*0/20 15-00**?所以当我暂停扳机时,它应该在第二天15:00开始。

  • 我运行一个Spring启动1.5.2应用程序。我想将缓存添加到我的服务方法中,我已经添加了Spring引导启动缓存maven依赖,我正在使用@Cacheable注释,但它没有生效,我在@配置类中创建了我的服务bean-这里有一个例子 下面是我的服务方法的一个例子 我的repoistory接口方法如下 每当我从RestController调用此服务方法时,缓存从未被触发,看起来它没有正确设置 我能做

  • 我正在学习在springboot中使用solr,我在一本书中尝试了该程序,spring-boot-starter-parent版本是2.1.2。在书中发布: 而我的sping-boot-starter-父版本是2.6.4: 我在pom中添加了solr依赖项。xml格式如下: 但是pom.xml显示错误:版本不能为空,所以我去https://mvnrepository.com/,发现最新的sping

  • 我正在尝试使用azure函数Cosmos触发器将数据从一个集合迁移到另一个集合。我已将StartFromStart设置为True。我有多个集合要迁移,所以我对每个集合使用一个函数,所以传输速度很快。 当我部署函数时,它会显示状态为已运行,但它实际上不会启动传输,除非我选择停止并启动。或者,如果我转到“监控”部分,转到“实时度量”,然后它就开始了。是否有一种方法可以让它在部署后立即开始传输。我弄乱了

  • 当启动 Burp 时,它将显示启动向导。 您可以选择要打开的 Burp 项目,以及要使用的项目配置。 本节英文原版地址: https://portswigger.net/burp/help/suite_gettingstarted.html