Articles of 事务

在PostgreSQL中重新启动一个失败的事务

通过事务我的意思是几个SQL语句包装(例如)在一个begin isolation level serializable块。 并发事务可以使这个事务失败,即回滚。 如何在PostgreSQL中重启失败的事务?

节点js。 续订交易

我的数据库中有'money'字段的'Banks'表, 用户可以定期提款,但只有在银行存款> 0的情况下才能提款。 首先,我应该得到银行的实体,然后检查(银行。金额> amountToWithdraw),然后撤回这个金额。 想象一下当并发用户试图提取一些钱的情况。 在那个时候,我检查是否(bank.money> amountToWithdraw)其他用户可以执行提款操作,而实际银行金额在DB中会less一些。 如何将交易应用于寻找银行业务(如何locking银行实体)? models.sequelize.transaction(function (t) { return models.Banks.findOne({where: { money: { $gt: 0 } }).then(function(bank){ //in this moment other user finished the same operation // how to lock access for editing bank object by other users after //findOne method? bank.money -= amountToWithdraw; return bank.save({transaction: t}); }) })

根据事务处理钩子

我想在我的用户模型上的afterCreate上创build一个sequelize挂钩。 当我只是创build一个没有交易的用户时,它工作得很好。 但是如果我在事务中运行我的创build语句挂钩运行之前提交。 用户模型挂钩 hooks: { afterCreate: userModule.NewUserHook, afterBulkCreate: userModule.NewUserHook } 钩子function NewUserHook: function NewUserHook(user, options){ console.log('Inside hook'); } 交易在options.transaction中是可以接受的。 在交易提交之后,有没有办法挂钩?

这是用Neo4j编写多语句事务的正确方法吗?

我很难解释Neo4j关于事务的文档。 他们的文档似乎表明喜欢这样做,而不是显式声明tx.commit()和tx.rollback() 。 这看起来是多语句交易和neo4j-driver最佳实践吗? const register = async (container, user) => { const session = driver.session() const timestamp = Date.now() const saltRounds = 10 const pwd = await utils.bcrypt.hash(user.password, saltRounds) try { //Start registration transaction const registerUser = session.writeTransaction(async (transaction) => { const initialCommit = await transaction .run(` CREATE (p:Person { email: '${user.email}', tel: '${user.tel}', […]

节点Orm2交易插件

我似乎有问题如何使用交易插件(与Postgresql)与节点orm2。 我想我误解了事务如何与asynchronous函数调用一起工作。 这是我的代码的一个例子: function(row){ db.transaction(function(err, txn){ if(err){ return console.log(err) }; row.property = 'foo'; row.save(function(err){ if(err){ return console.log(err) }; console.log("saved"); }); txn.commit(function(err){ if(err){ return console.log(err) }; console.log("committed"); }); }); 当我运行这段代码时,偶尔会看到console.log输出: "committed" "saved" 这是我所期望的相反的顺序。 我对行进行的更改不会保存到数据库中。 看起来在这里有一些asynchronous函数调用的问题,但我只是从节点orm2事务插件的文档。 任何人有任何想法我做错了什么? 谢谢!

与Sequelize交易不起作用

我想build立一个简单的networking表单,你可以input一个人的名字,姓氏,并为这个人select多个组(但现在是一个) 我正在使用node.js并将其存储在MariaDB数据库中。 Sequelize根据定义的模型创build了表Persons , Groups和GroupsPersons 。 var Sequelize = require("sequelize"); var sequelize = new Sequelize(config.database, config.username, config.password, config); var Group = sequelize.define("Group", { name: { type: DataTypes.STRING, allowNull: false } } var Person = sequelize.define("Person", { firstName: { type: DataTypes.STRING, allowNull: false }, lastName: { type: DataTypes.STRING, allowNull: false } } Person.belongsToMany(Group, {as: 'Groups'}); Group.belongsToMany(Person, […]

没有嵌套的nodejs pg事务

我想知道是否有可能运行一系列的SQL语句,并使它们都在单个事务中提交。 我正在看的场景是一个数组有一系列的值,我想插入到一个表中,而不是单独的,但作为一个单位。 我正在看下面的项目,它提供了使用pg的节点中事务的框架。 单个事务看起来是嵌套在一起的,所以我不确定这是如何处理一个包含可变数目元素的数组的。 https://github.com/brianc/node-postgres/wiki/Transactions var pg = require('pg'); var rollback = function(client, done) { client.query('ROLLBACK', function(err) { //if there was a problem rolling back the query //something is seriously messed up. Return the error //to the done function to close & remove this client from //the pool. If you leave a client in the […]

Pg-promise:交易问题

我用pg-promise与发生器交易得到了一些奇怪的东西。 这就是我要的 : 获取或注册一个用户(getOrRegisterUser) 做批次的东西(4插入发生器) 最后,使用getOrRegisterCurrentParkingIfProvided生成器的最后一个插入(发生器registerCall) 这是我的代码: db.tx(function (t) { return t.task.call(params, getOrRegisterUser).then(function (user) { params.masterId = user.id; // NOTICE : MY USER ID DATABASE return t.batch([ t.task.call(params, registerNewPhones), t.task.call(params, registerNewPlate), t.task.call(params, registerNewSubscriptions), t.task.call(params, getOrRegisterCurrentParkingIfProvided) ]).then(function (result) { params.ParkingId = (result[3] !== undefined) ? result[3].id : null; return t.task.call(params, registerCall); }) }); }).then(function () { […]

我如何在SailsJs中使用PostgreSQL事务?

我的问题是,我有一个复杂的查询链,如果这个交易的人失败,它会回滚。 我已经阅读了Sails中的事务,并且默认情况下,Sails不支持事务,因为每个事务与Postgresbuild立新的连接,所以一个查询有一个新的连接。 那么,我如何使用Sails交易?

有没有办法在pg-promise中触发一个不会影响外部事务的内部事务?

在pg-promise我有一种情况需要触发一个内部事务,如果需要的话可以回滚,这不会导致调用事务在错误时被回滚: var db = pgp()(connection); db.task( function (tk){ tk.method(/* Logic used to decide if I need to continue */) .then( function(data){ if (!data) return; tk.tx( function*(tx){ // Somewhere in here I need to fire another transaction that I don't care if it fails // but I need things to roll back inside of it should […]