You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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原生的初始化逻辑,兼容性更强:
    1. 取消你配置文件中以下三项的注释:
      spring.sql.init.mode=always
      spring.sql.init.data-locations= classpath:/data.sql
      spring.jpa.defer-datasource-initialization=true
      
    2. 将原来import.sql里的SQL内容移动到resources目录下的data.sql文件中即可,Spring默认支持多行SQL解析,无需额外配置。
额外注意事项
  • 确保SQL文件编码为UTF-8无BOM格式,避免隐藏字符干扰解析
  • 每条SQL语句末尾必须加英文分号作为结束标识
  • 生产环境请关闭自动建表和强制SQL初始化配置,避免数据丢失

内容的提问来源于stack exchange,提问作者lapurita

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 06:45:04