Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.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立即选择值和增量_Sql_Postgresql - Fatal编程技术网

PostgreSQL立即选择值和增量

PostgreSQL立即选择值和增量,sql,postgresql,Sql,Postgresql,我正在寻找以下问题的可能解决方案。我将数据存储在一个表中,以跟踪客户希望在数据库中使用的特殊增量编号。这是他们内部使用的一个特殊号码 我想做的是,当我选择这个数字时,它会在表中自动递增。因此,我不存在另一笔交易的问题,来自使用该系统的其他人,使用相同的ID号 所以我想选择当前的数字,然后一次增加一个,这样我就不会有重复的数字了。如果可能的话,我该怎么做呢?这应该可以做到,但需要注意的是,它将返回新id而不是旧id: UPDATE foo SET id=nextval('foo_sequence'

我正在寻找以下问题的可能解决方案。我将数据存储在一个表中,以跟踪客户希望在数据库中使用的特殊增量编号。这是他们内部使用的一个特殊号码

我想做的是,当我选择这个数字时,它会在表中自动递增。因此,我不存在另一笔交易的问题,来自使用该系统的其他人,使用相同的ID号


所以我想选择当前的数字,然后一次增加一个,这样我就不会有重复的数字了。如果可能的话,我该怎么做呢?

这应该可以做到,但需要注意的是,它将返回新id而不是旧id:

UPDATE foo
SET id=nextval('foo_sequence')
WHERE ...
RETURNING * 

使用
将其增量为1
时,您还希望更新现有值,对吗?为什么不使用序列?如果没有适当开发,它不会受到其他方法可能出现的数字争用的影响。例如,假设两个人去选择一条记录,如果他们都看到“当前”为10,那么他们都会尝试创建11…UPDATE foo SET id=nextval('foo_sequence'),其中。。。返回*也可以采用另一种方法:首先在读取时选择id列(听起来像是版本id列)。执行更新时,添加子句
其中version\u id=:selected\u version\u id
。每次更新时,如果表上有一个触发器更新
版本id
,则不会发生并发事务。中的第二个人将更新0行,因为版本号不再匹配。捕获0行的更新状态以检测并发问题。
UPDATE the_table
SET the_column = the_column + 1
WHERE qualifier = X
RETURNING the_column;