PostgreSQL - 为非主键创建一个自增列
PostgreSQL - create an auto-increment column for non-primary key
我正在使用与开源 Parse Server 集成的 PostgreSQL 9.5 X64。我的 table 具有以下结构。
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?
中实现这一点
您可以尝试将 item_id
列设为 SERIAL
。我不知道是否可以更改当前的 item_id
列以使其连续,因此我们可能不得不删除该列然后再将其添加回去,如下所示:
ALTER TABLE yourTable DROP COLUMN item_id;
ALTER TABLE yourTable ADD COLUMN item_id SERIAL;
如果 item_id
列中已经有数据,从串行的角度来看可能没有意义,所以希望删除它不会有任何坏处。
添加一个带序列的默认值:
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
statrments 中排除 item_id
列,因为只有在没有为该列指定值时才会使用默认值。
我正在使用与开源 Parse Server 集成的 PostgreSQL 9.5 X64。我的 table 具有以下结构。
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?
您可以尝试将 item_id
列设为 SERIAL
。我不知道是否可以更改当前的 item_id
列以使其连续,因此我们可能不得不删除该列然后再将其添加回去,如下所示:
ALTER TABLE yourTable DROP COLUMN item_id;
ALTER TABLE yourTable ADD COLUMN item_id SERIAL;
如果 item_id
列中已经有数据,从串行的角度来看可能没有意义,所以希望删除它不会有任何坏处。
添加一个带序列的默认值:
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
statrments 中排除 item_id
列,因为只有在没有为该列指定值时才会使用默认值。