【问题标题】:Why am I getting error: null value in column when inserting into a table?为什么我收到错误:插入表时列中有空值?
【发布时间】:2021-03-02 06:58:20
【问题描述】:

我在postgresql中有两张表,如下:

用户表:

CREATE TABLE public.users
(
    user_id integer NOT NULL DEFAULT nextval('users_user_id_seq'::regclass),
    first_name character varying(90) COLLATE pg_catalog."default" NOT NULL,
    last_name character varying(90) COLLATE pg_catalog."default" NOT NULL,
    email citext COLLATE pg_catalog."default" NOT NULL,
    user_password character varying(90) COLLATE pg_catalog."default" NOT NULL,
    business_status boolean NOT NULL,
    phone_number character varying(12) COLLATE pg_catalog."default" NOT NULL,
    bt_id integer,
    bs_id integer,
    is_active boolean NOT NULL,
    is_verified boolean NOT NULL,
    CONSTRAINT users_pkey PRIMARY KEY (user_id),
    CONSTRAINT users_email_key UNIQUE (email),
    CONSTRAINT bs_id FOREIGN KEY (bs_id)
        REFERENCES public.business_step (bs_id) MATCH SIMPLE
        ON UPDATE CASCADE
        ON DELETE CASCADE
        NOT VALID,
    CONSTRAINT bt_id FOREIGN KEY (bt_id)
        REFERENCES public.business_type (bt_id) MATCH SIMPLE
        ON UPDATE CASCADE
        ON DELETE CASCADE
        NOT VALID
)

管理表:

CREATE TABLE public.admin
(
    admin_id integer NOT NULL DEFAULT nextval('admin_admin_id_seq'::regclass),
    user_id integer NOT NULL,
    CONSTRAINT admin_pkey PRIMARY KEY (admin_id),
    CONSTRAINT user_id FOREIGN KEY (user_id)
        REFERENCES public.users (user_id) MATCH SIMPLE
        ON UPDATE CASCADE
        ON DELETE CASCADE
)

我正在使用 Nodejs 实现一个路由,我可以使用以下代码在其中插入一个新管理员:

Queries.js 中的代码

const insertAdmin = (request, response) => {
    const { user_id } = request.body

    pool.query('INSERT INTO admin (user_id) VALUES ($1)', [user_id], (error, results) => {
        if (error) {
            throw error
        }
        response.status(201).send(`User added with ID: ${result.insertId}`)
    })
}

index.js 中的代码

app.post('/admins/insert', db.insertAdmin)

使用以下 curl 路由插入新管理员时:

curl --data "user_id =39" http://localhost:3000/users

我收到以下错误消息:

错误:关系“admin”的“user_id”列中的空值违反非空约束 在 Parser.parseErrorMessage (C:\Users\ealfo\node-api-postgres\node_modules\pg-protocol\dist\parser.js:278:15) 在 Parser.handlePacket (C:\Users\ealfo\node-api-postgres\node_modules\pg-protocol\dist\parser.js:126:29) 在 Parser.parse (C:\Users\ealfo\node-api-postgres\node_modules\pg-protocol\dist\parser.js:39:38) 在套接字。 (C:\Users\ealfo\node-api-postgres\node_modules\pg-protocol\dist\index.js:10:42) 在 Socket.emit (events.js:315:20) 在 addChunk (_stream_readable.js:309:12) 在 readableAddChunk (_stream_readable.js:284:9) 在 Socket.Readable.push (_stream_readable.js:223:10) 在 TCP.onStreamRead (internal/stream_base_commons.js:188:23) { 长度:265, 严重性:'错误', 代码:'23502', detail: '失败的行包含 (12, null).', 提示:未定义, 位置:未定义, 内部位置:未定义, 内部查询:未定义, 其中:未定义, 架构:'公共', 表:'管理员', 列:'user_id', 数据类型:未定义, 约束:未定义, 文件:'d:\pginstaller_13.auto\postgres.windows-x64\src\backend\executor\execmain.c', 行:'1965', 例程:'ExecConstraints' }

为什么会出现此错误消息?我是使用 NodeJS 和 PostgreSQL 的新手,如果这个问题已在另一篇文章中得到解答,我深表歉意。尽管如此,我想了解更多,并从我的错误中吸取教训。提前谢谢你。

【问题讨论】:

  • 嗯,user_id 必须为 NULL。
  • 不,user_id 不为 NULL。
  • 那么你就不会得到那个错误。
  • 这就是这篇文章的重点。我不应该得到这个错误,但它仍然给我这个错误。

标签: node.js postgresql


【解决方案1】:

您必须将 body-parser 添加到您的中间件。根据 curl 命令判断,您需要从 url 解析正文。

类似的东西。

const bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: true })); // to pass bodies from url

body-parser 库的完整文档可以找到:https://github.com/expressjs/body-parser

【讨论】:

猜你喜欢
  • 2021-11-11
  • 2021-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-12
  • 1970-01-01
相关资源
最近更新 更多