我的一般理解是元组是一行。但是,我正在使用Heroku中的Postgres开发计划。它的限制为 10,000 行。我有超过 100,000 个条目用于n_live_tup
。这怎么可能?
Tuple"是抽象术语,"row"用于具体实现.
就像"关系"与"表"一样。
在Postgres的MVCC实现中,同一表行的多个实例可以同时存在 - 对于同一表的不同快照或过时的"死元组"。在Postgres的说法中,"行"是这种情况的总称,"元组"用于一个实例。但这更多的是你所说的指导方针,而不是实际的规则。
否则,这些术语通常使用,意思相同。您可以在维基百科中找到有关它们中的每一个的更多信息。
不知道Heroku政策的背后是什么。但是,以pg_stat_user_tables
或pgstattuple
为单位的n_live_tup
数字表示表中的"活动行数"。看:
- n_live_tup和n_dead_tup在pg_stat_user_tables中的含义是什么
在Postgres中,术语
行表示一个条目的逻辑表示形式
元组是该条目的物理表示形式。
(注意:为了避免名称混淆,我说的是表中的条目)
因此,假设有一个新创建的条目,例如 R1。此时,此条目是行和元组。但是当它被更新时,将创建一个新条目,例如 R2,同样,每当更新此条目时,将创建一个新条目 R3、R4 等。每当创建新条目时,如果数据库中存在的任何事务都没有使用旧条目,则该条目将被标记为死条目。
因此,如果我们正确地注意到该单个条目,则数据库中有多个版本,但是每当任何客户端/应用程序请求此条目时,它应该只返回一个条目。因此,条目的这些多个版本(R1、R2、R3 等)称为元组,无论哪个是最新的元组(除非未订购此条目的删除命令)将是应用程序的行。
行在PostgreSQL中通常称为元组。另一方面,Heroku 上的 Postgres 开发计划中n_live_tup
参数是指预期的实时元组数量。实时元组包括可见行和不可见行,它们包含的行可能比整个表多。这似乎是你达到极限的原因。