Spring Boot整合PostgreSQL执行import.sql文件出现语法错误问题
问题根因
你遇到的syntax error at end of input报错,本质是Hibernate默认解析import.sql时,将每行内容视为独立的完整SQL语句执行。你的INSERT语句拆成了两行,Hibernate单独执行第一行insert into users(user_id, username, email, password, created_at)时,语句不完整,因此抛出语法错误。
你直接在pgAdmin/终端执行正常,是因为数据库客户端会自动识别分号作为语句结束标识,支持多行SQL解析,和Hibernate的默认解析逻辑不同。
解决方案
你可以任选以下一种方式解决:
- 方案1:调整
import.sql格式
将每条SQL语句合并为单行,不要换行,修改后的语句如下:insert into users(user_id, username, email, password, created_at) values(1, 'alex', 'alex@email.com', 'pword', current_timestamp); - 方案2:配置Hibernate支持多行SQL
在application.properties中添加如下配置,指定多行SQL提取器,即可保留SQL的换行写法:spring.jpa.properties.hibernate.hbm2ddl.import_files_sql_extractor=org.hibernate.tool.hbm2ddl.MultipleLinesSqlCommandExtractor - 方案3:改用Spring Boot原生SQL初始化机制
如果你使用的是Spring Boot 2.5及以上版本,更推荐用Spring原生的初始化逻辑,兼容性更强:- 取消你配置文件中以下三项的注释:
spring.sql.init.mode=always spring.sql.init.data-locations= classpath:/data.sql spring.jpa.defer-datasource-initialization=true - 将原来
import.sql里的SQL内容移动到resources目录下的data.sql文件中即可,Spring默认支持多行SQL解析,无需额外配置。
- 取消你配置文件中以下三项的注释:
额外注意事项
- 确保SQL文件编码为UTF-8无BOM格式,避免隐藏字符干扰解析
- 每条SQL语句末尾必须加英文分号作为结束标识
- 生产环境请关闭自动建表和强制SQL初始化配置,避免数据丢失
内容的提问来源于stack exchange,提问作者lapurita
相关产品推荐
相关产品推荐

