Postgresql 如果提供的值为Null,则希望不为Null,并默认为False
我想做到这一点:Postgresql 如果提供的值为Null,则希望不为Null,并默认为False,postgresql,Postgresql,我想做到这一点: 列bool不为空 当提供的值为空时,它将用默认值false 我想这会使它: create table public.testnull ( xid integer not null, bool boolean default false ) 测试出错 insert into public.testnotnull values(2, null) ERROR: null value in column "bool" violates not-null
false
create table public.testnull
(
xid integer not null, bool boolean default false
)
测试出错
insert into public.testnotnull values(2, null)
ERROR: null value in column "bool" violates not-null constraint
DETAIL: Failing row contains (2, null).
SQL state: 23502
这将运行,但不会使用默认值。请不要告诉我使用触发器
CREATE TABLE public.testnull
(
xid integer NOT NULL, bool boolean DEFAULT false
)
- 您需要在
语句中使用INSERT
关键字,而不是DEFAULT
NULL
- :
:相应的列将填充其默认值。标识列将由关联序列生成的新值填充。对于生成的列,允许指定此项,但仅指定从其生成表达式计算列的正常行为DEFAULT
- :
- 另外,在使用
时,请始终明确指定列名INSERT
- 从几十年的经验来看:除非您使用的是ORM,否则不可能使
定义和CREATE TABLE
语句保持同步,最终您将在INSERT
语句不期望的地方添加新列或更改现有列,所有内容都将中断INSERT
- 从几十年的经验来看:除非您使用的是ORM,否则不可能使
请不要告诉我使用触发器
CREATE TABLE public.testnull
(
xid integer NOT NULL, bool boolean DEFAULT false
)
但是,如果您想在这样的语句中将NULL
更改为DEFAULT
或FALSE
:插入表(xid,bool)值(2,NULL)
,则必须使用触发器。这是不可能的
(当然,您可以将视图
与自定义插入
处理程序一起使用,但这与创建触发器是一样的)。
- 您需要在
INSERT
语句中使用DEFAULT
关键字,而不是NULL
- :
DEFAULT
:相应的列将填充其默认值。标识列将由关联序列生成的新值填充。对于生成的列,允许指定此项,但仅指定从其生成表达式计算列的正常行为
- 另外,在使用
INSERT
时,请始终明确指定列名
- 从几十年的经验来看:除非您使用的是ORM,否则不可能使
CREATE TABLE
定义和INSERT
语句保持同步,最终您将在INSERT
语句不期望的地方添加新列或更改现有列,所有内容都将中断
请不要告诉我使用触发器
CREATE TABLE public.testnull
(
xid integer NOT NULL, bool boolean DEFAULT false
)
但是,如果您想在这样的语句中将NULL
更改为DEFAULT
或FALSE
:插入表(xid,bool)值(2,NULL)
,则必须使用触发器。这是不可能的
(当然,您可以将视图
与自定义插入
处理程序一起使用,但这与创建触发器是一样的)