为什么在 PostgreSQL 中,当你删除表中的一行时,未来插入的行的 id 号不是连续的?

2023-12-15

我创建下表

CREATE TABLE dogs (
  id serial,
  name VARCHAR(15),
  age integer;

我的桌子看起来像这样

                                  Table "public.birds"
 Column  |         Type          |                     Modifiers                      
---------+-----------------------+-------------------------------------    
 id      | integer               | not null default nextval('birds_id_seq'::regclass)
 name    | character varying(25) | 
 age     | integer               | 

我插入两行

INSERT INTO dogs (name, age) 
VALUES ('puffy', 13),
 ('fluffy', 15);

表格现在看起来像这样

  id |  name  | age 
 ----+--------+-----
   1 | puffy  |  13
   2 | fluffy |  15
 (2 rows)

然后我删除 id = 2 的行

DELETE FROM dogs WHERE id = 2;

并添加另一行

INSERT INTO dogs (name, age) VALUES('mimi', 20);

该表是

  id | name  | age 
 ----+-------+-----
   1 | puffy |  13
   3 | mimi  |  20
 (2 rows)

我的问题是为什么第二行中 id 的下一个数字不是 2 而是 3?我猜想在某些东西下面的某个地方存储了内存中的最后一个值,并且具有该 id 的行被删除并不重要。我知道如果需要的话我可以显式插入 id 值。但我想弄清楚为什么会发生这种情况。 是什么功能或特性造成了这种情况?它是如何工作的?


PostgreSQL 不努力跟踪已删除的序列 ID。它只是使用一个计数器来获取下一个要生成的 ID。

如果您生成值然后回滚事务、客户端连接在提交之前崩溃或服务器崩溃,也会出现间隙。

您可以依赖生成的 ID 的唯一属性是唯一性。您甚至不能依赖它们按照生成的顺序出现在表中,因为提交顺序不一定与 ID 分配顺序相同。

如果您需要无缝序列,有多种方法可以实现它们,但它们在并发写入负载中的性能很差。这就是 PostgreSQL 这样做的原因。

有关更多信息,请 Google“gaplessequence postgresql”并阅读有关序列和“nextval”函数的文档章节。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么在 PostgreSQL 中,当你删除表中的一行时,未来插入的行的 id 号不是连续的? 的相关文章

  • 如何使用 SQL Server 查询对“版本号”列进行排序

    我想知道我们当中的 SQL 天才是否可以向我伸出援助之手 我有一个专栏VersionNo在表中Versions包含 版本号 值 例如 VersionNo 1 2 3 1 1 10 3 1 1 4 7 2 etc 我正在寻找对此进行排序 但不
  • 如何在sql中提取周数

    我有一个 varchar2 类型的转换列 其中包含以下主菜 01 02 2012 01 03 2012 etc 我使用 to date 函数将其转换为另一列中的日期格式 这是我得到的格式 01 JAN 2012 03 APR 2012 当我
  • 如何在数据库中对 (Java) 枚举进行建模(使用 SQL92)

    您好 我正在使用名为 性别 的列对实体进行建模 在应用程序代码中 性别应该是一个 Java 枚举类型 有 2 个值 男性和女性 知道作为数据类型的枚举不是通用 SQL 语言 92 的一部分 您将如何建模它 数据模型必须是可移植的 以便由多个
  • 如何查询多对多表(一个表的值成为列标题)

    给定此表结构 我想展平多对多关系 并将一个表的名称字段中的值设置为列标题 并将同一表中的数量设置为列值 目前可行的想法是将值放入字典 哈希表 中并用代码表示这些数据 但我想知道是否有 SQL 方法可以做到这一点 我还使用 Linq to S
  • 通过分布式数据库聚合作业优化网络带宽

    我有一个分布式 联合数据库 结构如下 数据库分布在三个地理位置 节点 每个节点集群有多个数据库 关系数据库是 PostgreSQL MySQL Oracle 和 MS SQL Server 的混合体 非关系数据库是 MongoDB 或 Ca
  • Django Channels Postgres InterfaceError:连接已关闭

    我似乎无法理解这里的问题 我正在为我的渠道消费者编写测试文档中的描述 https channels readthedocs io en latest topics testing html 我通常会使用 Django 默认的单元测试 但由于
  • 如何使用 libpq 获取双精度值?

    The examples http www postgresql org docs 9 3 interactive libpq example htmllibpq 文档中展示了如何通过将整数值转换为主机字节序表示来获取整数值 我很好奇必须做
  • 列的 SQL MAX(包括其主键)

    Short 从下面的 sql select 中 我获取了 cart id 和该购物车中最高价值商品的值 SELECT CartItems cart id MAX ItemValues value FROM CartItems INNER J
  • 当我耗尽 bigint 生成的密钥时会发生什么?怎么处理呢?

    我自己无法想象一个好的答案 所以我想在这里问 在我心里 我总是想知道 如果AUTO INCREMENT PRIMARY ID我的专栏MySQL表用完了吗 举例来说 我有一个有两列的表 一个ID auto increment primary
  • 如何在 Go 应用程序中处理打开/关闭数据库连接?

    我的 Web API 应用程序中有一组函数 他们对 Postgres 数据库中的数据执行一些操作 func CreateUser db err sql Open postgres user postgres password passwor
  • 查询交叉表视图

    我在 PostgreSQL 中有一个表 如下所示 Item1 Item2 Item3 Item4 Value1 Value2 Value3 Value4 我想要一个查询 该查询将显示如下表 ItemHead ValueHead Item1
  • SQL Server:复制表中的列

    将表中的列中的所有值复制到同一表中的另一列的最简单方法是什么 使用单个语句 如果列具有相同的数据类型 UPDATE
  • JOOQ 查询 JOIN ON WITH 子句

    如何编写 JOOQ 查询来连接 with 子句中的字段 例如 我尝试过 create with a as select val 1 as x val a as y select from tableByName a join ANOTHER
  • 如何使用 RODBC 将数据帧保存到数据库生成的主键表

    我想使用 R 脚本将数据框输入到数据库中的现有表中 并且希望数据库中的表具有顺序主键 我的问题是 RODBC 似乎不允许主键约束 这是创建我想要的表的 SQL CREATE TABLE dbo results ID INT IDENTITY
  • count 和 groupby 在一个查询中一起使用

    以下查询正在获取页面上的一些产品信息 这很好 但我也想以文本形式显示它出现的产品编号 但是 我使用了groupby但我也想用count on pro id SELECT FROM cart WHERE session id SESSION
  • 展平具有未知列数的子/父数据

    我正在努力寻找存储和表示 SQL MySQL DB 和 C Windows 表单中的数据的最佳方法 我的数据映射到如下所示的类时 public class Parent public string UniqueID get set Key
  • 寻找免费的 GUI 工具来使用 PostgreSQL [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 目前 我正在使用独立的 GUI 工具DbSchema http www dbschema com 设计
  • python 没有名为serial的模块

    我的 python 程序有问题 我编写了程序来将数据 温度 从 arduino 获取到我的树莓派 sqlite 数据库 但它在第 4 行 导入串行 处给了我一个错误 提示 ImportError 没有名为串行的模块 我使用 python3
  • 如何在 SQL 中存储目标(例如 RPG Quest)

    今天有人问我他们应该如何将任务目标存储在 SQL 数据库中 在这种情况下 请考虑角色扮演游戏 目标可能包括以下一些内容 发现 地点 杀死 n MOB 类型 获取 对象 的 n 个 实现 技能组 中的 技能 你在角色扮演游戏中获得的所有其他东
  • 扁平化/反规范化 SQL 查找表的最佳方法?

    我有很多这样的表 Lookup HealthCheckupRisks ID Name 1 Anemia 2 Anorexic 3 Bulemic 4 Depression 122 Syphilis PatientRisksOnCheckup

随机推荐

  • 在 Python 中使用空格有什么陷阱吗?

    目前 我在 Python 中从未遇到过空格问题 尽管我只在两个项目中使用过它 而且我是唯一的程序员 对于学习 Python 的人来说 Python 中的空格和缩进有哪些潜在的陷阱 在某些编辑器中 一行用空格缩进 而下一行用制表符缩进 这可能
  • 如何根据动态字段对 solr 结果进行排序

    我需要根据动态字段对结果进行排序 我怎样才能做到这一点 当我对其中一些动态属性的最小值进行排序时 它没有给出正确的结果 因为我的查询就像 sort min A 160018 A chandigarh1 一些文档同时具有这两个字段A 1600
  • python 从 tsv 文件链接一个列表

    我有这个 tsv 文件 其中包含一些链接路径 每个链接由 分隔我想用 在下面的示例中 我们可以看到文件中的文本是分开的 我只想通读最后一列 这是一条以 14th 开头的路径 6a3701d319fc3754 1297740409 166 1
  • 如何从 PHP 文本中删除空行?

    我需要在 PHP 中删除空白行 带有空格或绝对空白 我使用这个正则表达式 但它不起作用 str ereg replace t r n str str preg replace t r n str 我想要的结果是 blahblah blahb
  • 如何在 Android 4.2 中以编程方式卸载 USB 驱动器

    我读过很多关于这个主题的文章 但我还没有找到解决方案 在我的应用程序中 我需要在将文件从 USB 驱动器复制到平板电脑后卸载 USB 驱动器 这样我就可以安全地删除它 而无需使用 设置 菜单 现在我正在使用这个方法 Utility copy
  • 如何通过ARC确保IOS 5中单例的销毁?

    比如说 我想创建一个里面有一些数据的单例 正如在单例中所期望的那样 数据仅动态分配一次 但我现在想知道何时以及如何发布这些数据 我应该建立特殊的方法来破坏单例吗 更具体地说 何时执行该单例的 dealloc 方法 谁对此负责 您可以声明显式
  • 尝试通过php执行python命令但权限错误

    我上传了一个图像文件并将其从临时文件夹复制到 var www 内的文件夹 然后 尝试通过 php 执行 python 命令 其中exec 命令采用以下格式 exec python file py FILES file name 即使执行以下
  • 如何从spark连接到远程hive服务器[重复]

    这个问题在这里已经有答案了 我在本地运行 Spark 想要访问位于远程 Hadoop 集群中的 Hive 表 我可以通过在 SPARK HOME 下启动 beeline 来访问配置单元表 ml master spark 2 0 0 bin
  • R,绘图,多个绘图图形中字体大小的变化

    我正在为出版物创建图表 并希望它们具有相同的字体大小 当我创建一个图形时多块地块 the 字体变小即使我没有改变tiff 分辨率或pointsize范围 我根据最终适合的绘图数量增加了图形大小 并确保单个和多个绘图图形的边距相等 以下是示例
  • 在 linq 中,为什么 IEnumerable.Intersect 的后续调用要快得多

    在看这个问题的时候C 两个数组的相似之处人们注意到 最初的 linq 调用比后续调用慢得多 缓存的是什么造成了如此大的差异 我感兴趣的是我们何时可以实现这种类型的行为 也许这只是因为一遍又一遍地使用相同的列表 static void Mai
  • 谷歌图表中垂直轴静态的水平滚动

    我在用google chart在我的应用程序中 我想实现滚动 我可以通过设置容器 div 的样式来做到这一点 但问题是它会随着轴滚动整个图表 如何仅水平滚动图表区域并保持垂直轴静态 可视化 API 有一个内置控件来处理图表滚动 图表范围过滤
  • jQuery - 通过 AJAX 提交表单并将结果页面放入 div...?

    我正在使用 jQuery 表单 http jquery malsup com form 将数据发送到表单 有没有办法可以在不刷新的情况下将表单生成的结果页面放入页面上的 div 中 任何建议表示赞赏 我会建议not使用该表单插件 它是在没有
  • 角度中的不安全链接

    在 AngularJS 中 在以下场景中 Firefox 将unsafe 在按以下方式生成的 url 前面 然后它会显示一个错误页面 指出 地址无法理解 这是我本地 PC 上的文件请求 Link li a href fruit title
  • 在同一台服务器上运行 Vue.js 和 Laravel(同一端口)

    我正在开发一个网站 使用 Laravel 作为后端 Vue js 2 作为前端 现在每次我想运行我的网站时我都必须使用两个命令 php artisan serve 这将在端口 8000 上运行 laravel 服务器 npm run dev
  • Matlab:矩阵中每一行的Argmax和点积

    我有2个矩阵 X in R n m and W in R k m where k lt
  • NGINX 未将调用从 React 应用程序路由到后端应用程序

    我有一个 AWS Ubuntu 服务器 它托管在 127 0 0 1 4100 运行的 React 前端 并使用端口 127 0 0 1 1323 对 Go 应用程序进行 api 调用 我安装了 Nginx 并为这两个端口设置了代理通行证
  • 当我尝试添加外部 Jars 时,转换为 dalvik 格式失败

    我使用 Zend Studio 7 2 作为我的主要 IDE 我开发 Android 应用程序 我想使用 html 解析器 但是添加外部 jar 我总是遇到同样的问题转换为 dalvik 格式失败而且eclipse需要很多时间来构建工作区
  • 在 WLP 8.5.5.8 上运行的 JAX-RS 应用程序中发布 JSON 时引发异常

    我有一个非常简单的使用 JAX RS 的 Java 应用程序 在 WLP 8 5 5 8 上运行 当我发布复合结构的 JSON 时 出现此错误 ERROR 错误处理时发生错误 放弃 无效类型 的价值 类型 java util LinkedH
  • 我们能否知道 WPF 上的用户或代码是否已关闭窗口?

    我有一个在我的应用程序上显示的窗口控件 有时 窗口由用户关闭 单击 X 按钮 有时由代码自动关闭 我正在监听 Closed 事件 也尝试过 Closing 并且想知道我是哪种情况 用户或代码 这可能吗 我知道this问题但确实没有令人满意的
  • 为什么在 PostgreSQL 中,当你删除表中的一行时,未来插入的行的 id 号不是连续的?

    我创建下表 CREATE TABLE dogs id serial name VARCHAR 15 age integer 我的桌子看起来像这样 Table public birds Column Type Modifiers id int