[postgresql] PostgreSQL은 모든 콘텐츠를 삭제합니다.

안녕하세요, 내 postgresql 테이블의 모든 데이터를 삭제하고 싶지만 테이블 자체는 삭제하고 싶습니다. 어떻게 할 수 있습니까?



답변

TRUNCATE TABLE명령을 사용하십시오 .


답변

PostgreSQL 데이터베이스의 테이블 / 테이블 내용은 여러 가지 방법으로 삭제할 수 있습니다.

SQL을 사용하여 테이블 콘텐츠 삭제 :

한 테이블의 내용 삭제 :

TRUNCATE table_name;
DELETE FROM table_name;

모든 명명 된 테이블의 내용 삭제 :

TRUNCATE table_a, table_b, …, table_z;

명명 된 테이블 및 테이블을 참조하는 테이블의 내용 삭제 (이 답변의 뒷부분에서 자세히 설명합니다) :

TRUNCATE table_a, table_b CASCADE;

pgAdmin을 사용하여 테이블 콘텐츠 삭제 :

한 테이블의 내용 삭제 :

Right click on the table -> Truncate

테이블 및이를 참조하는 테이블의 컨텐츠 삭제 :

Right click on the table -> Truncate Cascaded

삭제와 자르기의 차이점 :

문서에서 :

DELETE는 지정된 테이블에서 WHERE 절을 충족하는 행을 삭제합니다. WHERE 절이 없으면 테이블의 모든 행이 삭제됩니다.
http://www.postgresql.org/docs/9.3/static/sql-delete.html

TRUNCATE는 테이블에서 모든 행을 제거하는 더 빠른 메커니즘을 제공하는 PostgreSQL 확장입니다. TRUNCATE는 테이블 집합에서 모든 행을 빠르게 제거합니다. 각 테이블에 대한 정규화되지 않은 DELETE와 동일한 효과가 있지만 실제로 테이블을 스캔하지 않기 때문에 더 빠릅니다. 또한 후속 VACUUM 작업을 요구하지 않고 즉시 디스크 공간을 회수합니다. 이것은 큰 테이블에서 가장 유용합니다.
http://www.postgresql.org/docs/9.1/static/sql-truncate.html

다른 테이블에서 참조되는 테이블 작업 :

둘 이상의 테이블이있는 데이터베이스가있는 경우 테이블은 관계가있을 수 있습니다. 예를 들어 세 개의 테이블이 있습니다.

create table customers (
customer_id int not null,
name varchar(20),
surname varchar(30),
constraint pk_customer primary key (customer_id)
);

create table orders (
order_id int not null,
number int not null,
customer_id int not null,
constraint pk_order primary key (order_id),
constraint fk_customer foreign key (customer_id) references customers(customer_id)
);

create table loyalty_cards (
card_id int not null,
card_number varchar(10) not null,
customer_id int not null,
constraint pk_card primary key (card_id),
constraint fk_customer foreign key (customer_id) references customers(customer_id)
);

이 테이블에 대해 준비된 데이터 :

insert into customers values (1, 'John', 'Smith');

insert into orders values 
(10, 1000, 1),
(11, 1009, 1),
(12, 1010, 1);        

insert into loyalty_cards values (100, 'A123456789', 1);

테이블 주문은 테이블 고객을 참조하고 테이블 loyalty_cards는 테이블 고객을 참조합니다. 다른 테이블이 참조하는 테이블에서 TRUNCATE / DELETE를 시도하면 (다른 테이블에 명명 된 테이블에 대한 외래 키 제약 조건이 있음) 오류가 발생합니다. 세 테이블 모두에서 콘텐츠를 삭제하려면이 모든 테이블의 이름을 지정해야합니다 (순서는 중요하지 않음).

TRUNCATE customers, loyalty_cards, orders;

또는 CASCADE 키워드로 참조되는 테이블 만 (하나 이상의 테이블 이름을 지정할 수 있음)

TRUNCATE customers CASCADE;

pgAdmin에도 동일하게 적용됩니다. customers 테이블을 마우스 오른쪽 버튼으로 클릭하고 Truncate Cascaded를 선택하십시오.


답변

들어 작은 테이블 DELETE빠른 자주와 (무거운 동시 부하) 덜 공격적 잠금이 필요합니다 :

DELETE FROM tbl;

WHERE조건 없이 .

들어 중간 또는 큰 테이블로 이동 TRUNCATE tbl@Greg 게시처럼.


답변