对于表currencies
:,我有以下模式
CREATE TABLE IF NOT EXISTS public.currencies
(
currency_id integer NOT NULL DEFAULT nextval('currencies_currency_id_seq'::regclass),
name text COLLATE pg_catalog."default" NOT NULL,
abbreviation character varying(10) COLLATE pg_catalog."default" NOT NULL,
base_value integer NOT NULL,
prepend_symbol_flg boolean NOT NULL DEFAULT false,
CONSTRAINT currencies_pkey PRIMARY KEY (currency_id)
)
注意,prepend_symbol_flg
是NOT NULL
并且具有默认值。
我在node.js中编写了一个REST API,其中包含以下INSERT
语句:
pool.query(
`INSERT INTO currencies (
name, abbreviation, base_value, prepend_symbol_flg
) VALUES ($1, $2, $3, $4) RETURNING *`,
[name, abbreviation, base_value, prepend_symbol_flg]
)
当我向具有以下正文的端点发送POST时:
{
"name": "copper piece",
"abbreviation": "cp",
"base_value": 1
}
Postman给出以下错误:null value in column "prepend_symbol_flg" of relation "currencies" violates not-null constraint
。
我知道这是因为主体不包括prepend_symbol_flg
键值对,但这不是默认值吗?因此,如果没有提供值,则使用默认值?
当用户没有为此字段提供值时,我需要做什么才能使用默认值?
当INSERT
语句中根本没有指定列时,将使用默认值。当传递NULL
值时不使用它——您的查询会这样做。您需要在JS(prepend_symbol_flg ?? false
(中执行默认操作,或者根据JSON主体中存在的字段动态创建查询字符串。