为什么在 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 号不是连续的? 的相关文章

  • 为什么 PostgreSQL 不能做这个简单的 FULL JOIN 呢?

    这是包含 2 个表的最小设置a and b每行 3 行 CREATE TABLE a id SERIAL PRIMARY KEY value TEXT CREATE INDEX ON a value CREATE TABLE b id SE
  • 加密数据库字段的好方法?

    我被要求加密数据库中的各种数据库字段 问题是这些字段在读取后需要解密 我在用着Django and SQL Server 2005 有什么好主意吗 See 在 SQL Server 2005 数据库中使用对称加密 https web arc
  • SQL 2008全文索引填充延迟

    我的经理说 在基础表数据更改后 可能需要一段时间才能更新全文搜索索引 例如 如果我有一张桌子Products有一个柱子Description我更新了该描述 然后我可能需要一些时间才能搜索该新描述 真的吗 这需要多长时间 SQL 2008 对
  • 什么时候应该使用 C++ 而不是 SQL?

    我是一名 C 程序员 偶尔使用 MySQL 来处理数据库 但我的 SQL 知识相当有限 但我肯定愿意改变这一点 目前 我正在尝试仅使用 SQL 查询对数据库中的数据进行分析 但我准备放弃了 转而将数据导入到C 中 用C 代码进行分析 我和同
  • sql查询获取从一月到当月的所有数据,即使没有记录

    我不擅长 sql 所以任何帮助世界都很棒 我有一个 SQL 查询 可以获取从一月到当月注册的记录 我的代码示例 SELECT DatePart YEAR p createStamp as TheYear DatePart MONTH p c
  • Reporting Services 在哪里存储其日志文件

    最相关的谷歌结果似乎表明 为了访问日志 我们必须将您自己的日志表部署到数据库并制作报告服务写入它 http technet microsoft com en us library ms157403 aspx 简而言之 Reporting S
  • 如何搜索例程的内容/(SP-触发函数)

    我需要在数据库内所有例程的例程主体 存储过程 函数 触发器 中搜索文本 我该怎么做 Thanks SELECT OBJECT NAME object id FROM sys sql modules WHERE definition LIKE
  • 实现软删除的最佳方法是什么?

    目前在做一个项目 我们要对大部分用户 用户角色 实现软删除 我们决定添加一个is deleted 0 数据库中每个表的字段并将其设置为 1 如果特定用户角色点击特定记录上的删除按钮 现在为了将来的维护 每个SELECT查询需要确保它们不包含
  • 快速查询最新记录的方法?

    我有一张这样的表 USER PLAN START DATE END DATE 1 A 20110101 NULL 1 B 20100101 20101231 2 A 20100101 20100505 在某种程度上 如果END DATE i
  • 如何在MYSQL中将整个字符串小写并保持第一个大写[重复]

    这个问题在这里已经有答案了 我的表栏目 我预期的输出会在列中发生变化 Smith Allen Doyle Dennis Baker Waker 这是我尝试过的 但不起作用 UPDATE TABLE employee SET last nam
  • 如何通过 SQL 表关联 SQL 中的实体

    我是数据库设计的初学者 我需要为项目创建数据库 我可以用面向对象的术语解释我想要做什么 值得庆幸的是 数据库专家会很友善地向我解释如何在数据库方面处理这个问题 我想创建一个与位置实体 州 城市 有关系的用户 ID 名称 实体 所以在编程语言
  • SQLite中的ROWID是自动设置的吗?

    所以 我在 Ionic 上有这个应用程序 它使用SQLite ngCordova 插件 https github com litehelpers Cordova sqlite storage用于内部存储 在其上 我使用以下命令创建一个表 d
  • 使用子查询 select 创建新表

    我试图从子查询选择创建一个新表 但出现以下错误 附近的语法不正确 SELECT INTO foo FROM SELECT DATEPART MONTH a InvoiceDate as CalMonth DATEPART YEAR a In
  • 从postgresql中的jsonb嵌套数组中删除键值对

    我有 jsonb 数据作为 a b 1 c 2 d 3 b 4 c 5 d 6 g b 1 c 2 d 3 b 4 c 5 d 6 我想从 a 和 g 键的嵌套数组中删除 c 键 是否有一个查询可以执行此操作 SELECT jsonb ob
  • 数字表与递归 CTE 生成一系列数字

    为什么使用数字表比使用递归 CTE 动态生成它们要快得多 在我的机器上 给定一张桌子numbers单列n 主键 包含从1到100000的数字 查询如下 select n from numbers 大约需要 400 毫秒才能完成 使用递归 C
  • 如何使用 SQL Server 2008 将行复制到同一个表中

    A 到目前为止我的方式 sqlCommand CommandText INSERT Table1 column1 column2 column3 SELECT column1 column2 column3 FROM Table1 WHER
  • 转义 to_tsquery 中的特殊字符

    如何转义传递给的字符串中的特殊字符to tsquery 例如 这种查询 select to tsquery AT T 生产 NOTICE text search query contains only stop words or doesn
  • 我是否需要在外键上指定 ON DELETE NO ACTION?

    我有以下与 SQL Server 2012 一起使用的 DDL CREATE TABLE Subject SubjectId INT IDENTITY 1 1 NOT NULL Name NVARCHAR 50 Not NULL CONST
  • 如何获取自定义订单的结果? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 代替ASC or DESC 我希望我的查询结果采用特定的自定义顺序 例如 如果我想要的结果不是 A B C D 而是 P A L H 该怎么
  • 如何将 PostgreSql 与 EntityFramework 6.0.2 集成? [复制]

    这个问题在这里已经有答案了 我收到以下错误 实体框架提供程序类型的 实例 成员 Npgsql NpgsqlServices Npgsql 版本 2 0 14 2 文化 中性 PublicKeyToken 5d8b90d52f46fda7 没

随机推荐

  • 在 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