- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有下表:
Table "public.product"
Column | Type | Modifiers
--------+---------+------------------------------------------------------
id | integer | not null default nextval('product_id_seq'::regclass)
name | text | not null
Indexes:
"product_pkey" PRIMARY KEY, btree (id)
Referenced by:
TABLE "stock" CONSTRAINT "stock_product_id_fkey" FOREIGN KEY (product_id) REFERENCES product(id)
这个表有2条记录:-
postgres=# select xmin, xmax, cmin, cmax, * from product;
xmin | xmax | cmin | cmax | id | name
---------+---------+------+------+----+---------
3126848 | 3126856 | 0 | 0 | 1 | Parle-G
3126849 | 3126858 | 0 | 0 | 2 | Pepsi
(2 rows)
我有以下与 xmax 和 cmin 列相关的问题:-
根据 postgres 文档,xmax 存储删除此行的事务的 ID。但是既然我的行还没有被删除,那么为什么它包含非零值。
Postgres 文档说 cmin 包含事务中创建此行的语句的序列号。根据 SQL 标准,每条语句都是一个独立的事务,因此,它必须包含非零数字的 cmin 列。
请指正我错的地方。提前致谢。
最佳答案
我会先回答你的第二个问题,因为这很简单:
cmin
从零开始计数,因此 cmin
为零意味着这是事务中的第一条语句。如果您的所有交易都包含一个语句,您可以期望 cmin
始终为零。
关于xmax
的含义:
除了存储删除行的事务编号外,该系统列还用于存储行锁。这些存储在行本身而不是共享内存中,以避免锁表溢出。
行锁有两种不同的存储方式:
如果只有一个事务持有一行锁,则事务号存储在xmax
中。
如果多个事务对一行有(共享)锁,则会创建一个multixact 结构,并将其编号存储在xmax
中。
xmax
的不同用法之间没有冲突,因为数据库有额外的信息:
表格行中的其他标志(作为系统列不可见)消除了 xmax
的含义。
提交日志 存储事务是否已提交。只有被提交的事务删除的行才真正被删除。
总而言之,如果您在 xmax
中看到一个非零值,这可能意味着四件事:
该行已被删除或更新,您的查询运行时使用的快照早于修改事务。
该行已被回滚的事务删除或更新。
该行被锁定或在过去的某个时间点被锁定,您会看到锁定事务的事务 ID。
和上面一样,但是你看到一个 multixact 值。您可以使用函数 pg_get_multixact_members
来查看哪些交易属于它。
您可能有兴趣阅读 my blog post我在这里更详细地探讨了这个问题。
关于sql - 为什么 postgres 表中的 xmax 系统列对于未删除的行不为零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49695279/
给定以下代码: byte x, xmin, xmax, xstep; x = (x + xstep < xmax ? x + xstep : xmax) 编译器告诉我 Cannot i
我想计算一个大数。 我的问题是有一个限制。 例如,如果您运行 factorial(170),它会返回:[1] 7.257416e+306。 但是一旦您想要计算 factorial(171)(或更大的数
我有下表: Table "public.product" Column | Type | Modifiers --------+----
当我使用以下两种方法之一在新模拟器实例中实例化 AVAssetExportSession 对象时: AVAsset *videoAsset = [AVAsset assetWithURL:videoU
使用 geom_ribbon 的标准方法是有一个固定的 x 值和一些 ymin 和 ymax 值。输入将是像 df_x 这样的数据框: library(tidyverse) # This works
我一直在 PostgreSQL 中学习 MVCC。据我了解,更新行时,将添加一个新行,旧行中的 xmax 值将具有新添加行的 xmin 的值。当我在我的 Postgres 数据库中的表中检查它时,xm
Postgres 中以下语句的含义和目的是什么: xmax::text::int > 0 这看起来像是转换为文本然后再次转换为整数??? 最佳答案 Postgres 中的每个表都有多个 system
for x in [temp for temp in xlist if temp xmax: continue 会起作用。 (你的 for 循环的其余部分是做什么的?)如果它可以只使用一个 list-
我正在使用 Microsoft 的 CustomVision.ai 构建自定义视觉应用程序. 我正在使用this tutorial . 在对象检测项目中标记图像时,需要使用标准化坐标指定每个标记对象的
根据 http://www.postgresql.org/docs/current/static/ddl-system-columns.html : xmax - The identity (tran
我是一名优秀的程序员,十分优秀!