我在做
CREATE UNIQUE INDEX index_name ON car (license_plate) WHERE deleted IS NULL
用例是软删除:
- 我们为汽车创建一行,deleted设置为null,license_plate唯一
- 现在我们不应该被允许进入另一辆车牌相同的车
- 我们通过将deleted设置为某个内容来软删除汽车
- 现在,我们应该被允许使用相同牌照进入一辆新车
这适用于postgres(在测试容器中运行(,但不适用于H2或HSQLDB。有没有一种方法可以用H2或我可以用Java编程创建的任何其他内存中数据库来实现同样的事情?
请参阅:PostgreSQL:创建一个索引来快速区分NULL和非NULL值
CREATE TABLE public.car (
id int4 NOT NULL GENERATED BY DEFAULT AS IDENTITY,
licenseplate varchar(20) NOT NULL,
deleted timestamp NULL
);
CREATE UNIQUE INDEX car_licenseplate_idx ON public.car USING btree (licenseplate) WHERE (deleted IS NULL);
我确实创建了字段deleted
作为时间戳,所以当记录被"软"删除时,您可以添加一个触发器来用now()
更新已删除的记录。
DBFIDDLE