본문 바로가기
IT/SQL 기초강좌 (PostgreSQL)

67강 SQL 초석 다지기 : PostgreSQL TRUNCATE TABLE

by DoitSQL 2023. 1. 10.
728x90

PostgreSQL 기초강의, PostgreSQL 기초강좌

67강 SQL 초석 다지기 : PostgreSQL TRUNCATE TABLE   

 

SQL 초석 다지기 67강 시작합니다.

 

이번 시간에는

 PostgreSQL TRUNCATE TABLE

에 대해서 알아보는 시간입니다.

 

요약: 이번 강의에서는 PostgreSQL TRUNCATE TABLE 문을 사용하여 대형 테이블에서 모든 데이터를 신속하게 삭제하는 방법에 대해 알아봅니다.


Introduction to PostgreSQL TRUNCATE TABLE statement   

테이블에서 모든 데이터를 제거하려면 DELETE 문을 사용합니다. 그러나 DELETE 문을 사용하여 데이터가 많은 테이블에서 모든 데이터를 삭제하면 효율적이지 않습니다. 성능이 떨어집니다.

이 경우 다음과 같이 TRUNCATE TABLE 문을 사용해야 합니다.

TRUNCATE TABLE table_name;   

 

TRUNCATE TABLE 문은 테이블을 스캔하지 않고 테이블에서 모든 데이터를 삭제합니다. 이것이 DELETE 문보다 빠른 이유입니다.

또한 TRUNCATE TABLE 문은 스토리지를 즉시 회수하므로 이후 VACUMM 작업을 수행할 필요가 없으므로 큰 테이블의 경우에 유용합니다.

베큠(VACUMM) 작업
베큠(Vacuum)은 PostgreSQL의 쓰레기 데이터를 정리하여 쾌적하게 청소하라는 명령인데, 쉽게 "디스크 조각 모음"이라고 생각하면된다.
데이터는 물리적으로 디스크에 저장되고 읽어서 보여주는데, 데이터를 갱신(UPDATE) 혹은 삭제(DELETE) 시에 디스크에 있던 기존 정보를 갱신하거나 삭제하지 않습니다.
기존 정보는 변경되었다는 표시만 남기고 새롭게 디스크에 갱신(UPDATE)된 정보를 기록합니다.
삭제(DELETE) 했어도 디스크 용량은 줄어들지 않으며 갱신(UPDATE) 시에는 새로운 행이 추가되기 때문에 디스크 용량이 증가하게되는거죠.
오라클의 REORG와 같은 것 입니다.

Remove all data from one table   

TRUNCATE TABLE 문의 가장 간단한 형식은 다음과 같습니다.

TRUNCATE TABLE table_name;   

 

 

다음 예제에서는 TRUNCATE TABLE 문을 사용하여 송장 테이블에서 모든 데이터를 삭제합니다.

TRUNCATE TABLE invoices;   

 

 

데이터를 제거하는 것 외에도 다음과 같은 RESTART IDENTITY 옵션을 사용하여 ID 열의 값을 재설정할 수 있습니다.

TRUNCATE TABLE table_name 
RESTART IDENTITY;   

 

 

예를 들어, 다음 문은 송장 테이블에서 모든 행을 제거하고 invoice_no 열과 관련된 시퀀스를 재설정합니다.

TRUNCATE TABLE invoices 
RESTART IDENTITY;   

기본적으로 TRUNCATE TABLE 문은 CONTINUE IDENTITY 옵션을 사용합니다. 이 옵션은 기본적으로 테이블의 열과 연결된 값을 순서대로 다시 시작하지 않습니다.

RESTART IDENTITY 옵션을 사용해야 ID열이 처음부터 다시 부여됩니다. (시퀀스 초기화)


Remove all data from multiple tables   

여러 테이블에서 한 번에 모든 데이터를 제거하려면 다음과 같이 각 테이블을 쉼표(,)로 구분합니다.

TRUNCATE TABLE 
    table_name1, 
    table_name2,
    ...;   

 

 

예를 들어, 다음 문은 송장 및 고객 테이블에서 모든 데이터를 제거합니다.

TRUNCATE TABLE invoices, customers;   


Remove all data from a table that has foreign key references   

실제로 삭제하려는 테이블에는 다른 테이블의 외부 키 참조가 있는 경우가 많습니다.

기본적으로 TRUNCATE TABLE 문은 외부 키 참조가 있는 테이블에서 데이터를 제거하지 않습니다.

테이블 및 테이블을 참조하는 외부 키가 있는 다른 테이블에서 데이터를 제거하려면 다음과 같이 TRUNCATE TABLE 문에서 CASCADE 옵션을 사용합니다.

TRUNCATE TABLE table_name 
CASCADE;   

 

 

다음 예제에서는 외부 키 제약 조건을 통해 송장 테이블 및 송장 테이블을 참조하는 기타 테이블에서 데이터를 삭제합니다.

TRUNCATE TABLE invoices CASCADE;   

 

CASCADE 옵션을 추가로 고려하여 사용해야 합니다. 그렇지 않으면 사용자가 원하지 않는 테이블의 데이터를 삭제할 수 있습니다.

기본적으로 TRUNCATE TABLE 문은 RESTRICT 옵션을 사용하여 외부 키 제약 조건 참조가 있는 테이블을 삭제할 수 없습니다.


PostgreSQL TRUNCATE TABLE and ON DELETE trigger   

TRUNCATE TABLE 문이 테이블에서 모든 데이터를 제거하더라도 테이블과 관련된  ON DELETE 트리거는 실행되지 않습니다.

테이블에 TRUNCATE TABLE 명령을 적용할 때 트리거를 실행하려면 해당 테이블에 대해 TRUNCATE 전 또는 TRUNCATE 후 트리거를 별도로 정의해야 합니다.

 

 

PostgreSQL TRUNCATE TABLE and transaction   

TRUNCATE TABLE은 안전합니다. 트랜잭션 내에 배치하면 안전하게 롤백할 수 있습니다.


요약

  • 큰 테이블에서 모든 데이터를 삭제하려면 TRUNCATE TABLE 문을 사용합니다.
  • CASCADE 옵션을 사용하여 테이블 및 외부 키 제약 조건을 통해 테이블을 참조하는 다른 테이블을 잘라냅니다.
  • 삭제 트리거 시 잘라내기 테이블이 실행되지 않습니다. 대신 잘라내기 전과 잘라내기 후 트리거를 실행합니다.
  • TRUNCATE TABLE 문은 트랜잭션에 안전합니다.

본 강의는 PostgreSQL Tutorial을 참조합니다.  https://www.postgresqltutorial.com/
Do it! SQL을 찾아 주셔서 감사합니다. 공감 ♥ , 댓글이 큰 힘이 됩니다.

 

728x90

댓글