Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
postgreSQL-为序列设置隐式起始值_Postgresql - Fatal编程技术网

postgreSQL-为序列设置隐式起始值

postgreSQL-为序列设置隐式起始值,postgresql,Postgresql,我正在使用postgresql数据库,我有一个id为的表,表列和类型为:serial,它会自动为列创建一个新序列,但它总是以设置开始(最小值=1,开始值=1->所以下一个值是2),所以..在每个表中,我的第一行都有id 2而不是1,这不是很奇怪吗??我认为每个人都习惯于以值1而不是2开始,我可以手动更改起始值,但我想问您是否知道如何将每个新序列的隐式起始值更改为1。或者至少他们为什么这么做。谢谢。当我创建这样一个表时 create table your_table ( id serial p

我正在使用postgresql数据库,我有一个id为的表,表列和类型为:serial,它会自动为列创建一个新序列,但它总是以设置开始(最小值=1,开始值=1->所以下一个值是2),所以..在每个表中,我的第一行都有id 2而不是1,这不是很奇怪吗??我认为每个人都习惯于以值1而不是2开始,我可以手动更改起始值,但我想问您是否知道如何将每个新序列的隐式起始值更改为1。或者至少他们为什么这么做。谢谢。

当我创建这样一个表时

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