【问题标题】:Cockroach oddly auto incrementing on PK id at server but not local (knex.js seeding cockroach public cloud hosted db)蟑螂奇怪地在服务器上的 PK id 上自动递增,但不是在本地(knex.js 播种蟑螂公共云托管数据库)
【发布时间】:2022-01-06 02:23:15
【问题描述】:

我一生都无法弄清楚为什么会发生这种情况。每次我运行表删除/创建迁移然后在服务器数据库上播种逻辑时,它都会给我奇怪的 18 位 id,而不是递增 1、2、3。本地一切正常,我的数据库是免费层托管的 Cockroach 数据库。我在这里播种 3 条记录是生成的示例 id (725368665646530561,725368665646694401,725368665646727169)

编辑:

根据评论和一些额外的研究,我发现 Cockroach DB 虽然与 Postgres 兼容,但并不是真正的 Postgres DB。我也没有意识到 AUTO_INCREMENT 方法是多么不受欢迎和表现不佳。我最终使用了一个扩展来生成 UUIDS 作为 PK,然后我查询新创建的数据并在另一个种子中需要一些 FK 关系时获取这些数据。

t.uuid('id').primary().notNullable().defaultTo(knex.raw('uuid_generate_v4()'));

【问题讨论】:

    标签: sql node.js knex.js cockroachdb


    【解决方案1】:

    您链接到的答案有点旧(从 2017 年开始)。 CockroachDB 可以生成自动递增的 ID,但存在性能成本。 (1) 对顺序数据使用主索引会降低性能,并且 (2) 需要在节点之间进行额外的协调才能生成递增值。

    如果这些性能折衷适合您,那么您可以使用serial_normalization=sql_sequence_cached 设置来获得您想要的。见https://www.cockroachlabs.com/docs/stable/serial.html

    此外,v21.2 支持标识列,这是获得类似内容的不同语法:https://www.cockroachlabs.com/docs/stable/create-table.html#identity-columns

    【讨论】:

    • 谢谢,感谢您提供的信息,它很有帮助。
    猜你喜欢
    • 1970-01-01
    • 2021-11-08
    • 2022-07-08
    • 2019-02-23
    • 2022-01-28
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    • 2017-10-26
    相关资源
    最近更新 更多