You need to enable JavaScript to run this app. Spring Boot中Liquibase创建Postgres表自带引号,如何无引号建表
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot中Liquibase创建Postgres表自带引号,如何无引号建表

Liquibase 连接 PostgreSQL 建表自动带双引号的处理方法

根因说明

PostgreSQL 的语法规则里,没有被双引号包裹的标识符(表名、列名)会被自动转换为小写格式存储。Liquibase 为了保留你在配置里写的驼峰式名称大小写,会自动给这类混合大小写的表名包裹双引号,否则生成的SQL执行后Postgres会把表名转成全小写,和Liquibase内部记录的元数据不匹配。

具体解决方案

1. 调整表名命名格式为全小写下划线(推荐,符合Postgres最佳实践)

直接修改你的建表changeSet中的tableName配置,把大小写混合的LabelEntity替换为全小写、下划线分隔的命名,完全去掉大小写混合的字段:

# create-label_entity-table.yml 修改后的核心片段
changes:
  - createTable:
      tableName: label_entity
      columns:
        - column:
            name: id
            type: serial
            autoIncrement: true
            constraints:
              primaryKey: true
              nullable: false
        # 其余列配置完全保持原有逻辑即可

修改后Liquibase生成的建表语句不会自动添加双引号,后续查询直接写SELECT * FROM public.label_entity即可正常执行,没有大小写匹配问题。

2. 全局修改Liquibase的标识符引用策略

如果不想修改原有驼峰命名的表名,可以在主changelog配置文件最开头,全局关闭Liquibase自动给非全小写标识符加双引号的逻辑:

# db.changelog-master.yml 修改后的配置
databaseChangeLog:
  # 新增全局属性,使用传统的标识符引用策略,不自动加引号
  - property:
      name: identifierQuotingStrategy
      value: LEGACY
  # 原有include配置保持不变
  - include:
      file: db/liquibase/create-label_entity-table.yml

配置生效后,即使你在changeSet里写了驼峰式表名,Liquibase生成的SQL也不会自动包裹双引号,Postgres会自动把表名转成小写存储,后续查询也不需要加双引号。

注意事项

如果数据库里已经存在之前创建的、带双引号的"LabelEntity"表,修改配置后需要先手动删除该旧表,同时清理DATABASECHANGELOG元数据表中对应已执行的changeSet记录,再重启应用让Liquibase重新执行建表流程,否则会触发表已存在的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 19:06:03