【问题标题】:PostgreSQL - create an auto-increment column for non-primary keyPostgreSQL - 为非主键创建一个自增列
【发布时间】:2018-12-31 15:33:51
【问题描述】:

我使用与开源 Parse Server 集成的 PostgreSQL 9.5 X64。我的表具有以下结构。

objectId (text with fixed 10 characters),
item_id (integer),
item_name (text with various length)

由于使用 Parse Server,objectId 是主键。它由 Parse Server 自动生成。 item_id 不是主键。我希望 item_id 在创建新记录时自动增加 1。如何在 Create Table 中实现?

【问题讨论】:

    标签: sql postgresql parse-platform parse-server postgresql-9.5


    【解决方案1】:

    使用序列添加默认值:

    CREATE SEQUENCE mytable_item_id_seq OWNED BY mytable. item_id;
    ALTER TABLE mytable ALTER item_id SET DEFAULT nextval('mytable_item_id_seq');
    

    要实现这一点,您必须从所有 INSERT 状态中排除 item_id 列,因为只有在未为该列指定值时才使用默认值。

    【讨论】:

    • 谢谢,这需要我很长时间才能弄清楚。我通过 dbeaver 插入并生成 ID,通过休眠我收到 NOT NULL CONSTRAINT VIOLATION
    【解决方案2】:

    您可以尝试将item_id 列设为SERIAL。我不知道是否可以更改当前的 item_id 列以使其成为串行,因此我们可能必须删除该列然后将其重新添加,如下所示:

    ALTER TABLE yourTable DROP COLUMN item_id;
    ALTER TABLE yourTable ADD COLUMN item_id SERIAL;
    

    如果item_id 列中已经有数据,从序列的角度来看可能没有意义,所以希望删除它不会有任何害处。

    【讨论】:

    • Serial 只是创建表时的简写,之后您将创建一个序列并将默认值编辑为nextval(‘sequencename’) 以实现相同的目的。
    • @SamiKuhmonen 如果您正在评论如何处理现有数据,但在 Postgres 的 modern versions 中,我给出的单行应该足以添加一个串行列。跨度>
    • 是的,它用于您的编辑前评论,如果需要保留数据,则可以使用。否则你的建议是正确的。
    猜你喜欢
    • 2023-04-01
    • 2023-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多