如何为给定的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会自动使用默认排序规则,完全匹配你的实体类需求 - 可提前创建
publicschema,避免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
相关产品推荐
相关产品推荐

