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

如何为给定的News、Comment实体编写适配H2数据库的Schema SQL?

H2适配Schema SQL解决方案

问题根因

你遇到的语法报错是因为直接复用的PostgreSQL建表语句中包含H2不支持的PG专属特性:

  • pg_catalog."default"是PostgreSQL专属的系统排序规则,即使开启H2的PostgreSQL兼容模式,也无法识别这类PG独有系统对象
  • 部分PostgreSQL专属的语法细节H2没有完全对齐,需要做少量调整

适配修改点

  • 移除所有字符串字段后的COLLATE pg_catalog."default"配置,H2会自动使用默认排序规则,完全匹配你的实体类需求
  • 可提前创建public schema,避免H2默认schema不匹配的问题
  • 外键配置的MATCH SIMPLE、ON UPDATE NO ACTION等语法H2原生兼容,可保留

适配后完整SQL

-- 可选:如果H2中未提前创建public schema,先执行这句
CREATE SCHEMA IF NOT EXISTS public;

CREATE TABLE public.news
(
    id bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 9223372036854775807 CACHE 1 ),
    date timestamp without time zone,
    text character varying(255),
    title character varying(255),
    CONSTRAINT news_pkey PRIMARY KEY (id)
);

CREATE TABLE public.comment
(
    id bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 9223372036854775807 CACHE 1 ),
    date timestamp without time zone,
    id_news bigint,
    text character varying(255),
    username character varying(255),
    CONSTRAINT comment_pkey PRIMARY KEY (id),
    CONSTRAINT fkbptqmm7bn3alb6htitgfrlt95 FOREIGN KEY (id_news)
        REFERENCES public.news (id) MATCH SIMPLE
        ON UPDATE NO ACTION
        ON DELETE NO ACTION
);

额外优化建议

如果你是用JPA的话,也可以直接配置H2的ddl-auto属性为update或者create,让框架自动生成适配H2的表结构,不需要手动编写SQL,适配成本更低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 16:45:03