postgreSQL-为序列设置隐式起始值
我正在使用postgresql数据库,我有一个id为的表,表列和类型为:serial,它会自动为列创建一个新序列,但它总是以设置开始(最小值=1,开始值=1->所以下一个值是2),所以..在每个表中,我的第一行都有id 2而不是1,这不是很奇怪吗??我认为每个人都习惯于以值1而不是2开始,我可以手动更改起始值,但我想问您是否知道如何将每个新序列的隐式起始值更改为1。或者至少他们为什么这么做。谢谢。当我创建这样一个表时postgreSQL-为序列设置隐式起始值,postgresql,Postgresql,我正在使用postgresql数据库,我有一个id为的表,表列和类型为:serial,它会自动为列创建一个新序列,但它总是以设置开始(最小值=1,开始值=1->所以下一个值是2),所以..在每个表中,我的第一行都有id 2而不是1,这不是很奇怪吗??我认为每个人都习惯于以值1而不是2开始,我可以手动更改起始值,但我想问您是否知道如何将每个新序列的隐式起始值更改为1。或者至少他们为什么这么做。谢谢。当我创建这样一个表时 create table your_table ( id serial p
create table your_table (
id serial primary key
);
PostgreSQL创建了这个序列
CREATE SEQUENCE your_table_id_seq
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 1
CACHE 1;
如果我插入一行,然后查看值
insert into your_table values (default);
select * from your_table;
身份证件
--
1.
当然,起始值1意味着插入的第一行将得到1?根据我的经验,串行ID通常从2开始。是的,当然,这就是我所说的,开始值隐式地是1,所以下一个值是2(我认为应该是1),不能在9.3或8.4中重现这一点;第一个id始终为1。您正在运行哪个版本的Postgres?这里有一个SQLFiddle示例,第一个值为1,正如预期的那样:我使用的是9.3.4版本,但尝试截断我的表,然后我想“重新启动”序列,我必须更改minvalue和start value,因为第二次它从2开始,我的错。您可以在一个SQL语句中截断并重新启动。见编辑后的答案。 id -- 1
truncate your_table restart identity;
insert into your_table values (default);
select * from your_table;
id
--
1