为什么在执行 INSERT 时不能在 NOT NULL 列中省略具有默认值的 属性?
Why can't I omit a property with a default value in a NOT NULL column when performing an INSERT?
我有以下 table 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 中使用以下 INSERT
语句编写了一个 REST API:
pool.query(
`INSERT INTO currencies (
name, abbreviation, base_value, prepend_symbol_flg
) VALUES (, , , ) 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 正文中存在的字段动态创建查询字符串。
我有以下 table 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 中使用以下 INSERT
语句编写了一个 REST API:
pool.query(
`INSERT INTO currencies (
name, abbreviation, base_value, prepend_symbol_flg
) VALUES (, , , ) 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 正文中存在的字段动态创建查询字符串。