[postgresql] 트랜잭션 생성후 커밋을 하지 않는다면?

1268 단어 PostgreSQLPostgreSQL
import {getConnection} from "typeorm";

const userFunction=()=>{

const connection = getConnection();
const queryRunner = connection.createQueryRunner();

await queryRunner.connect();

await queryRunner.query("SELECT * FROM users");

const users = await queryRunner.manager.find(User);
if (users){
return true // 커밋없이 리턴
}
await queryRunner.startTransaction();

try {

    await queryRunner.manager.save(user1);
    await queryRunner.manager.save(user2);
    await queryRunner.manager.save(photos);

    await queryRunner.commitTransaction();
    return true 커밋 후 리턴

} catch (err) {

    await queryRunner.rollbackTransaction();

} finally {

    await queryRunner.release();
}

}

START TRANSACTION 실행 후 commitTransaction이 실행되지 않으면
계속 실행상태가 되어 락이걸려 다른 쿼리가 실행되지 않는다.즉 nodeJs서버는 살아있지만 쿼리가 실행되지 않아 서버가 멈춤상태에 있는것과 같은 상태가 된다.트랜잭션을 끝내는 유일한 방법은 commit을 하는 방법뿐이다.락의 조건은 트랜잭션 고립수준에 따라 달라진다.

참고
https://stackoverflow.com/questions/4896479/what-happens-if-you-dont-commit-a-transaction-to-a-database-say-sql-server

좋은 웹페이지 즐겨찾기