首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PostgreSQL事务锁

PostgreSQL事务锁
EN

Stack Overflow用户
提问于 2016-11-08 21:46:39
回答 1查看 2.2K关注 0票数 1

我在我的项目中使用pg,pg-本机,我使用的事务类似于下面的代码,我不熟悉数据库,

https://github.com/brianc/node-postgres/wiki/Transactions

  1. 这个锁表还是只锁行?
  2. 锁是否意味着可移植的CreateUpdateDeleteCRUD中。但还可以是Read吗?如果是这样的话,数据是被选中的,这是在此更改之前(在BEGIN之前)的数据吗?

"pg":"^4.5.1",“pg-原生”:"^1.10.0",

代码语言:javascript
复制
var pg = require('pg').native;
...

var rollback = function(dbClient, response) {
  dbClient.query('ROLLBACK', function() {
    dbClient.end();
    // reject(response);
  });
};

dbClient.query('BEGIN', function(error, result) {
  ...

dbClient.query('COMMIT', dbClient.end.bind(dbClient));
  ...
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-09 09:49:33

阅读文献资料获得完整的图片。这是值得努力的。

PostgreSQL有不同级别的锁定:表锁和行锁(我不会进入建议锁)。

可以使用LOCK命令显式地获取表锁,但这是您通常不做的事情。正常情况是在访问表时使用的隐式表锁--例如,当您在表中读取或写入数据时,将采取防止并发用户在表上使用ALTERDROP的锁。

行锁由DML语句(INSERTUPDATEDELETE)以及SELECT ... FOR SHARE/UPDATE获取。它们防止同时修改已锁定的行。

所有锁都在事务结束时释放。如果没有显式启动事务,那么每个语句都在自己的事务中运行,锁不会超过单个语句的持续时间。如果使用BEGINSTART TRANSACTION显式启动事务,则事务将一直持续到COMMITROLLBACK

PostgreSQL (以及其他使用多版本并发控制的数据库)的一个重要设计概念是,读取器从不阻止作者,反之亦然。这是通过将旧版本的数据保存在周围,并为读者提供在快照时有效的数据(大致上,数据库的一致视图在语句或事务开始时是有效的)。这些老行最终由自动真空背景过程清理。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40496991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档