【问题标题】:Why doesn't knex create serial column in postgres?为什么 knex 不在 postgres 中创建串行列?
【发布时间】:2018-06-30 01:51:00
【问题描述】:

我使用 knex 创建 postgres 表如下:

knex.schema.createTable('users', table => {
    table.bigIncrements('user_id');
    ....
})

但是在创建表后,user_id 列是 integer,而不是预期的 serial

pgAdmin获取的sql如下:

CREATE TABLE public.users
(
    user_id bigint NOT NULL DEFAULT nextval('users_user_id_seq'::regclass),
    ....
)

结果是当我执行insert 语句时,user_id 不会按预期自动递增。

有人给吗?

=====================

目前我刚改成mysql连接,插入效果很好。但是如果我把数据库改回postgresql,那么由于user_id的重复,插入会失败。代码可以在这里找到:https://github.com/buzz-buzz/buzz-service

【问题讨论】:

    标签: postgresql knex.js


    【解决方案1】:

    serialbigserial 不是真正的类型,它们只是 pgAdmin 所显示内容的简写。

    当您在 pgAdmin 中查看序列时,您还会发现已经创建了一个名为 users_user_id_seq 的序列。

    【讨论】:

    • 我应该怎么做才能让 postgresql 在我插入时自动增加 user_id?我将连接字符串更改为mysql,插入会很好,但是如果我改回postgresql,那么由于user_id的重复,插入会失败。代码可以在这里找到:github.com/buzz-buzz/buzz-service
    • 请在问题中发布相关代码,我和其他许多人不会挖掘您的存储库来查找问题。另外我不熟悉 knex.js 只使用 postgresql。但是请确保不要尝试为 user_id 插入实际值。该列不应该包含在 INSERT 语句中,或者 DEFAULT 应该作为它的值传递。
    • 请注意,当您将实际值直接插入 user_id 列时,序列将不知道这一点,并且可能会生成您之前插入的值,从而导致相同的错误。检查 pgAdmin 序列的当前值是否高于表中的最高值。
    猜你喜欢
    • 2014-02-15
    • 1970-01-01
    • 2017-05-23
    • 2021-11-03
    • 2021-06-05
    • 2016-02-22
    • 2019-07-23
    • 2021-02-20
    • 1970-01-01
    相关资源
    最近更新 更多