记录下postgres中实现自增id的方式。

在mysql中我们可以将给一个列定义auto_increment属性,用来实现自增id,但是在postgresql中并不支持这个属性。在postgresql中的要实现列自增有两种方式:

  1. 创建将一个列声明为serial:
1
2
3
    Create table test(
        Id not null serial
    );
  1. 创建一个序列,然后这个自增列的默认值从序列生成:
1
2
3
4
    Create sequence seq_test_id;
    Create table test(
        Id not null default nextval('seq_test_id')
    );

这两种方式是实现的效果是相同的的,见官方文档:https://www.postgresql.org/docs/8.1/static/datatype.html#DATATYPE-SERIAL

不同点在于,声明一个列为serial时,会自动创建一个sequence,然后这个列如果被删掉了,这个sequence会自动被删掉,如果有其他地方用到,则该处不在生效,所以如果要有多个地方公用一个sequence,正确的做法是手动创建sequence,类似于方法2.