gpt4 book ai didi

java - 执行 postgresql 模式脚本 Spring DatabasePopulator 提示 Unterminated dollar quote started at position

转载 作者:行者123 更新时间:2023-12-05 07:36:53 24 4
gpt4 key购买 nike

在我的 spring 应用程序中,我使用实体类创建了许多表,并且效果很好。我将 Spring 与 Hibernate 一起使用,数据库是 PostgreSQL。

然后我需要一些函数,所以我准备了一个包含函数代码的SQL脚本。该脚本在 pgAdmin 以及 netbeans 数据库服务 sql 窗口中执行。

但是如果我想在hibernate生成所有表后运行脚本就无法执行。为此,我在 ApplicationContext.java 中创建了 Beans

@Bean
public DataSourceInitializer dataSourceInitializer() {
final DataSourceInitializer initializer = new DataSourceInitializer();
initializer.setDataSource(dataSource());
initializer.setDatabasePopulator(databasePopulator());
return initializer;
}

private DatabasePopulator databasePopulator() {
final ResourceDatabasePopulator populator = new ResourceDatabasePopulator();
populator.addScript(schemaScript);
return populator;
}

我收到的错误是

Caused by: org.postgresql.util.PSQLException: Unterminated dollar quote started at position 122 in SQL CREATE OR REPLACE FUNCTION public.populate_raw_data( source character varying, func character varying) RETURNS integer AS $BODY$ DECLARE cnt integer. Expected terminating $$

我已经阅读了 SO 中的几个问题,但到目前为止没有任何帮助。 pom.xml 中的 postgresql 驱动程序是版本 42.2.1

最佳答案

ResourceDatabasePopulator 中的默认语句分隔符是 ;。因此它向服务器发送一段脚本,在第一次遇到 ; 时停止,数据库无法理解它。

覆盖分隔符帮助我解决了同样的错误:

databasePopulator.setSeparator(ScriptUtils.EOF_STATEMENT_SEPARATOR);

关于java - 执行 postgresql 模式脚本 Spring DatabasePopulator 提示 Unterminated dollar quote started at position,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48902574/

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