首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在执行INSERT时,我不能在NULL列中省略一个默认值的属性?

问为什么在执行INSERT时,我不能在NULL列中省略一个默认值的属性?
EN

Stack Overflow用户
提问于 2022-04-10 01:50:16
回答 1查看 105关注 0票数 1

对于表currencies,我有以下模式

代码语言:javascript
复制
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,具有默认值。

我用以下INSERT语句用node.js编写了REST:

代码语言:javascript
复制
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]
)

当我用以下主体向端点发送帖子时:

代码语言:javascript
复制
{
    "name": "copper piece",
    "abbreviation": "cp",
    "base_value": 1
}

邮递员给出了以下错误:null value in column "prepend_symbol_flg" of relation "currencies" violates not-null constraint。

我理解这是因为主体不包括prepend_symbol_flg键值对,但这不是默认值吗?因此,如果没有提供一个值,则使用默认值来代替?

当用户没有为这个字段提供值时,我需要做什么才能获得默认的使用呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-10 18:36:29

如果没有在INSERT语句中指定列,则使用默认值。在传递NULL值时不使用它--您的查询是这样做的。您需要在JS (prepend_symbol_flg ?? false)中执行默认操作,或者根据JSON主体中的字段动态创建查询字符串。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71813192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档