【问题标题】:Primary key is not generating wiht my sequelize table我的 sequelize 表没有生成主键
【发布时间】:2020-01-04 05:21:09
【问题描述】:

我有一个 sequelize 表,其中没有当前主键作为 ID。我目前不确定为什么 id 主键没有呈现。我尝试强制 id 为主键和自动增量。

有谁知道我可以如何解决这个问题。

这是我当前的表格的样子:

colabdesk=#  \d users;
                          Table "public.users"
   Column   |           Type           | Collation | Nullable | Default 
------------+--------------------------+-----------+----------+---------
 id         | integer                  |           | not null | 
 username   | character varying(255)   |           |          | 
 password   | character varying(255)   |           |          | 
 email      | character varying(255)   |           |          | 
 first_name | character varying(255)   |           |          | 
 last_name  | character varying(255)   |           |          | 
 DATE       | timestamp with time zone |           | not null | 
Indexes:
    "users_pkey" PRIMARY KEY, btree (id)
    "users_email_key" UNIQUE CONSTRAINT, btree (email)
    "users_username_key" UNIQUE CONSTRAINT, btree (username)
Referenced by:
    TABLE "details" CONSTRAINT "details_userId_fkey" FOREIGN KEY ("userId") REFERENCES users(id) ON UPDATE CASCADE ON DELETE SET NULL
    TABLE "profiles" CONSTRAINT "profiles_userId_fkey" FOREIGN KEY ("userId") REFERENCES users(id) ON UPDATE CASCADE ON DELETE SET NULL

colabdesk=# 

这就是我的 sequlize 表设计的样子:

const seq = require('sequelize');
const { postgres } = require('../index');


const permissions = [['Admin', 'Staff', 'User']];


const User = postgres.define(
    "user",
    {
        username: {type: seq.STRING, unique: true, require: true, 
                validate: {isAlphanumeric: true, len:  [8,16]}
        },
        password: {type: seq.STRING, require: true,
                  validate: {len: [8, 18]}          
        },
        email: {type: seq.STRING, unique: true, require: true, 
               validate: {isEmail: true}
        },
        first_name: {type: seq.STRING, require: true,
                    validate: {isAlpha: true}
        },
        last_name: {type: seq.STRING, require: true,
                    validate: {isAlpha: true,}
        },
        permission: {type: seq.STRING, require: true, 
               validate: {isAlpha: true, isIn: permissions}
        },
        renter: {type: seq.BOOLEAN, require: true, defaultValue: 0,
                    validate: {isIn: [['0', '1']], isInt: true}
        },
        rentee: {type: seq.BOOLEAN, require: true, defaultValue: 0,
                    validate: {isIn: [['0', '1']], isInt: true}
        },
    },
    {
        createdAt:  seq.DATE,
        updatedAt:  seq.DATE,
    }
);


postgres.sync()
    .then(() => {
        console.log("User table is connected and synced")
    })
    .catch((err) => {
        console.log("Error syncing the User table: " + JSON.stringify(err))
    })


module.exports.User = User;

有谁知道如何解决这个问题

更新

这是请求的样子:

{
    "username": "omarjandali",
    "password": "password",
    "email": "omar@admin.com",
    "first_name": "omar",
    "last_name": "jandali",
    "permission": "Admin",
    "renter": "1",
    "rentee": "0"
}

【问题讨论】:

    标签: mysql postgresql escaping sequelize.js


    【解决方案1】:

    我认为您错过了在模型中定义主键:

    id: {
        type: seq.INTEGER, 
        primaryKey: true,
        autoIncrement: true,
    },
    

    应该是这样的:

    const User = postgres.define(
      "user", {
        id: {
            type: seq.INTEGER, 
            primaryKey: true,
            autoIncrement: true,
        },
        ... // <--- REST OF YOUR FIELDS
      }, {
        createdAt: seq.DATE,
        updatedAt: seq.DATE,
      }
    );
    

    【讨论】:

    • 我添加了 id 字段,但仍然出现错误。当我向数据库发出 post 请求时,我需要传递一个 id 吗???
    【解决方案2】:

    看起来该表被创建为

    create table users( id integer, ...) --which would not auto-increment 
    as opposed to
    create table users( id serial, ...)  --which would auto-increment.
    

    如果没有数据,删除并重新创建表可能同样容易。你也可以试试

    create sequence users_id_seq 
      increment 1
      minvalue 1
      maxvalue 99999999999999999
      start 1;
    
     alter table users alter column id set default nextval('users_id_seq'::regclass);
    

    如果表中有数据,则必须调整序列的起始值。

    【讨论】:

      猜你喜欢
      • 2015-02-14
      • 1970-01-01
      • 1970-01-01
      • 2018-08-06
      • 2013-05-09
      • 1970-01-01
      • 2020-09-02
      • 2021-04-21
      • 1970-01-01
      相关资源
      最近更新 更多