mysql - 主键未与我的 Sequelize 表一起生成

标签 mysql postgresql escaping sequelize.js

我有一个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=# 

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

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"
}

最佳答案

看起来该表是创建为

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);

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

关于mysql - 主键未与我的 Sequelize 表一起生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57735463/

相关文章:

postgresql - 是否可以将 PostGIS 用于三维空间?

java - 消息格式的更好替代方案

vim - 为 Vim 命令行创建一个映射,在插入寄存器之前转义寄存器的内容

postgresql - 将 Postgres 聚合函数转换为内联数组

javascript - 打印 javascript 转义文本时缺少脚本标记

mysql - 子查询中的 GROUP_CONCAT 速度较慢

javascript - PHP - 获取数据时 Ajax 自动刷新页面

php - 使用 Laravel 通过与枢轴链接的表搜索数据库

mysql - 聚合数据时在选择查询中使用单引号?

postgresql - 如何更改 PostgreSQL 中的默认时间戳格式