Postgres의 트랜잭션
Postgres에서 모든 단일 문에는 문이 트랜잭션에서 발생한다는 개념이 내포되어 있습니다. 두 개의 간단한 UPDATE 문을 작성하면 다음과 같이 보일 수 있습니다.
UPDATE table1 SET column1 = 100.00
WHERE id = 3;
UPDATE table1 SET column1 = 100.00
WHERE id = 4;
그러나 이러한
UPDATE
문과 같은 문이 발생하면 다음과 같은 트랜잭션 내에서 발생한다고 생각할 수 있습니다.BEGIN;
UPDATE table1 SET column1 = 100.00
WHERE id = 3;
COMMIT;
BEGIN;
UPDATE table1 SET column1 = 100.00
WHERE id = 4;
COMMIT;
트랜잭션 "블록"은
BEGIN
및 COMMIT
명령 간에 실행되는 쿼리 집합입니다. 이러한 명령 중 하나를 지정하지 않으면 암시적으로 모든 명령을 둘러쌉니다.BEGIN
및 COMMIT
명령을 사용하여 다른 트랜잭션 블록을 지정하도록 이 기본 동작을 재정의할 수 있습니다. 아이디어는 데이터베이스에서 한 번에 여러 작업을 수행할 수 있다는 것입니다. 이는 중간 작업이 실패할 수 있는 경우 후속 명령을 실행하지 않으려는 경우에 유용합니다. 전체 "트랜잭션"이 발생하지 않습니다.아래에서 이 스크립트에서 실제로
BEGIN
및 COMMIT
를 지정한 것을 볼 수 있습니다. 이제 트랜잭션 블록으로 이 두 가지가 데이터베이스에 "커밋"되고 동시에 표시됩니다.BEGIN;
UPDATE table1 SET column1 = 100.00
WHERE id = 3;
UPDATE table1 SET column1 = 50.00
WHERE id = 4;
COMMIT;
이는 API 또는 기타 서비스가 첫 번째 문과 두 번째 문 사이에 데이터를 요청하고
UPDATE
모든 데이터가 업데이트될 때까지 데이터에 액세스하지 않으려는 경우에도 유용할 수 있습니다. 단순UPDATE
명령문의 경우 대기 시간이 정말 느리지만 더 길고 복잡한 프로세스의 경우 이는 점점 더 중요해집니다.또 다른 예: 테이블이 삭제되었지만 완전히 다시 채워질 때까지 테이블을 볼 수 없도록 하려면 다음을 수행하십시오.
BEGIN;
CREATE TABLE table2 (
column1 datatype(length) column_contraint,
column2 datatype(length) column_contraint,
);
// add some data into table2
DROP table table1;
SELECT * INTO table1 FROM table2;
COMMIT;
롤백
마지막 트랜잭션 블록의 변경 사항을 롤백하거나 실행 취소하려면
ROLLBACK
명령을 사용할 수 있습니다. 이것은 개별 명령문을 순회하고 테이블을 수정한 방법을 파악하는 것이 정말 어려울 수 있기 때문에 매우 유용할 수 있습니다. 트랜잭션 블록의 모든 것을 래핑한 다음 롤백하면 블록에 있던 모든 것을 쉽게 실행 취소할 수 있습니다.
Reference
이 문제에 관하여(Postgres의 트랜잭션), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/sayemmh/transactions-in-postgres-3hlg텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)