我有一张表,只想要一个条目。因此,如果有人试图插入另一行,则不应允许,只有在删除先前存在的行后才能插入。
如何为这样的表设置规则?
我有一张表,只想要一个条目。因此,如果有人试图插入另一行,则不应允许,只有在删除先前存在的行后才能插入。
如何为这样的表设置规则?
CREATE TABLE public.onerow (
onerow_id bool PRIMARY KEY DEFAULT true
, data text
, CONSTRAINT onerow_uni CHECK (onerow_id)
);
CHECK
约束对于boolean
列来说可以非常简单。只允许true
。
您可能希望 REVOKE
(或不GRANT
)DELETE
和TRUNCATE
权限从public
(和所有其他角色)中移除,以防止单行被删除。例如:
REVOKE DELETE, TRUNCATE ON public.onerow FROM public;
在表中添加一个新列,然后对该列添加检查约束和唯一性约束。例如:
CREATE TABLE logging (
LogId integer UNIQUE default(1),
MyData text,
OtherStuff numeric,
Constraint CHK_Logging_singlerow CHECK (LogId = 1)
);
现在您只能拥有一个LogId = 1的行。 如果尝试添加新行,则会破坏唯一性或检查约束。
(我可能搞砸了语法,但这给了您一个想法?)
我认为这里不需要额外的字段。只需要在常量上创建唯一索引即可:
CREATE UNIQUE INDEX ux_onerow ON onerow ((0));
您可以使用以下方法强制单行显示:
id int GENERATED ALWAYS AS (1) STORED UNIQUE
id
列始终为1
,并且由于它是一个UNIQUE
列,表只能容纳这一行。