gpt4 book ai didi

node.js - PostgreSQL 事务锁

转载 作者:行者123 更新时间:2023-11-29 14:06:34 24 4
gpt4 key购买 nike

我正在为我的项目使用 pg,pg-native,我使用类似下面代码的事务,我不熟悉数据库,
https://github.com/brianc/node-postgres/wiki/Transactions
1、这个是锁表还是只锁行?
2. 锁是否意味着禁用CRUD中的CreateUpdateDelete。但仍然可以读取?如果是,则选择数据,是否为此次更改前的数据(BEGIN 之前)?

"pg": "^4.5.1","pg-native": "^1.10.0",

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));
...

最佳答案

阅读the documentation完整的图片。这是值得的。

PostgreSQL 有不同级别的锁:表锁和行锁(我不会进入咨询锁)。

可以使用 LOCK 显式获取表锁命令,但这是你通常不会做的事情。正常情况是在您访问表时使用隐式表锁——例如,当您在表中读取或写入数据时,将使用一个锁来防止并发用户访问 ALTER。或 DROP在 table 上。

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

所有锁在事务结束时释放。如果您没有显式启动事务,则每个语句都在其自己的事务中运行,并且锁不会比单个语句的持续时间更长。如果您使用 BEGIN 显式开始交易或 START TRANSACTION ,它会持续到你COMMITROLLBACK .

PostgreSQL(以及任何其他使用多版本并发控制的数据库)的一个重要设计理念是读取器永远不会阻塞写入器,反之亦然。这可以通过保留旧版本的数据来促进,并且可以为读者提供在他们的快照中有效的数据(大致上,数据库的一致 View 在语句或事务开始时有效)。这些旧行最终会被 autovacuum 后台进程清除。

关于node.js - PostgreSQL 事务锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40496991/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com