postgresql db table 锁定或行锁定多查询执行

postgresql db table locking or row locking multi query execution

我想了解 postgreSQL 如何执行多查询,例如我有一个数据库,其中有很多插入查询 运行ning,例如每分钟 20-40 次,还有很多 select 每分钟 200-300 次查询(按主键简单查询 selection)。

此类查询在 table 上 运行,我很好奇 postgreSQL 如何处理这些查询。就像当插入查询是 运行 table 被锁定并且我们必须等待 select 查询或者它是行锁定以便在插入查询正在进行时 select 查询可以继续并忽略锁定的行吗?

在 mysql 数据库中有 MyISAM 引擎执行 table 锁和 innoDB 执行行锁定我猜...

Postgres 实现了 multiv version concurrency control (MVCC),这意味着读者永远不会阻止作者,而作者也永远不会阻止读者。

对于普通的 DML 语句,Postgres 也从不使用 table 锁,因此 SELECT 查询永远不会被您同时 运行 的任何 INSERT 语句阻塞。

Postgres Wiki 包含指向有关 MVCC 在 Postgres 中的具体实现和工作方式的更详细描述的链接。

如今,基本上每个现代 DBMS 都使用某种 MVCC。 Oracle、Firebird 和 DB2 "always" 一直在使用它。 SQL Server 在 SQL Server 2005 中引入了它(虽然它仍然不是默认行为)并且在 MySQL InnoDB 引擎中使用它。