PostgreSQL에서 데이터를 삭제하는 방법은 DELETE
문을 사용합니다. 이 문을 통해 특정 조건에 맞는 데이터를 삭제하거나, 테이블의 모든 데이터를 삭제할 수 있습니다. DELETE
문은 주로 WHERE
절과 함께 사용하여 특정 조건을 만족하는 행만 삭제할 수 있도록 조정할 수 있습니다.
아래에서는 PostgreSQL에서 데이터를 삭제하는 다양한 방법을 예제와 함께 설명하겠습니다.
1. 기본 DELETE
문법
DELETE FROM 테이블이름 WHERE 조건;
테이블이름
: 데이터를 삭제할 테이블 이름입니다.WHERE 조건
: 특정 조건을 만족하는 행만 삭제할 때 사용됩니다. 만약WHERE
절을 사용하지 않으면 모든 데이터가 삭제되므로 주의해야 합니다.
2. 데이터 삭제 예제
2.1 특정 조건에 맞는 데이터 삭제
특정 조건을 만족하는 데이터만 삭제하려면 WHERE
절을 사용합니다. 예를 들어, 다음과 같은 users
테이블이 있다고 가정합니다:
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100),
age INTEGER
);
INSERT INTO users (name, email, age) VALUES
('Alice Smith', 'alice@example.com', 25),
('Bob Brown', 'bob@example.com', 30),
('Charlie Johnson', 'charlie@example.com', 35),
('David Green', 'david@example.com', 40);
예시: 나이가 30인 사용자 삭제
users
테이블에서 나이가 30인 사용자를 삭제하려면:
DELETE FROM users
WHERE age = 30;
이 명령은 나이가 30인 사용자, 즉 Bob Brown
을 삭제합니다.
예시: 특정 이메일을 가진 사용자 삭제
특정 이메일을 가진 사용자를 삭제하려면:
DELETE FROM users
WHERE email = 'charlie@example.com';
이 명령은 이메일이 'charlie@example.com'
인 사용자를 삭제합니다.
2.2 모든 데이터 삭제 (DELETE
vs TRUNCATE
)
모든 데이터를 삭제하려면
DELETE
문에서 WHERE
절을 생략하면 테이블의 모든 데이터를 삭제할 수 있습니다.
DELETE FROM users;
이 명령은 users
테이블의 모든 데이터를 삭제합니다. 하지만 테이블의 구조는 그대로 남아 있습니다.
TRUNCATE
를 사용하여 모든 데이터 삭제
TRUNCATE
문을 사용하면 테이블의 데이터를 더 빠르게 삭제할 수 있습니다. DELETE
와 달리 TRUNCATE
는 모든 데이터를 즉시 삭제하며, 일반적으로 더 효율적입니다.
TRUNCATE TABLE users;
TRUNCATE
는 DELETE
와 다르게 삭제된 데이터에 대한 트리거(trigger)가 실행되지 않고, 테이블 구조는 유지되지만 데이터를 빠르게 비웁니다.
3. 데이터 삭제 전후 확인 (RETURNING
절 사용)
PostgreSQL에서는 RETURNING
절을 사용하여 삭제된 데이터의 정보를 조회할 수 있습니다. 이를 통해 삭제된 행의 특정 열 값을 반환받을 수 있습니다.
예시: 삭제된 사용자의 이름과 이메일 반환
나이가 35인 사용자를 삭제하고, 삭제된 사용자의 이름과 이메일을 반환받으려면:
DELETE FROM users
WHERE age = 35
RETURNING name, email;
결과:
name | email
----------------+---------------------
Charlie Johnson| charlie@example.com
RETURNING
절은 삭제된 행의 정보를 확인하는 데 매우 유용합니다.
4. 트랜잭션과 함께 데이터 삭제 (BEGIN
, COMMIT
, ROLLBACK
)
데이터 삭제는 영구적이기 때문에, 실수로 데이터를 삭제하지 않도록 트랜잭션을 사용할 수 있습니다. 트랜잭션을 사용하면 삭제 작업을 안전하게 수행하고, 문제가 있을 경우 ROLLBACK
을 통해 취소할 수 있습니다.
예시: 트랜잭션을 사용한 데이터 삭제
- 먼저 트랜잭션을 시작합니다.
BEGIN;
- 데이터를 삭제합니다.
DELETE FROM users WHERE age < 30;
- 삭제한 데이터가 문제 없으면
COMMIT
으로 변경 사항을 적용합니다. COMMIT;
- 만약 삭제 작업을 취소하려면
ROLLBACK
으로 트랜잭션을 되돌릴 수 있습니다. ROLLBACK;
이 방법은 특히 중요한 데이터베이스 작업에서 실수를 방지하는 데 매우 유용합니다.
5. 데이터 삭제 요약
- 특정 조건에 맞는 데이터 삭제:
DELETE FROM 테이블이름 WHERE 조건
을 사용하여 특정 조건을 만족하는 데이터를 삭제할 수 있습니다. - 모든 데이터 삭제:
DELETE FROM 테이블이름
또는TRUNCATE TABLE
을 사용하여 모든 데이터를 삭제할 수 있습니다. - 연관된 데이터 삭제: 외래 키 제약 조건에서
ON DELETE CASCADE
옵션을 사용하면, 연관된 테이블의 데이터도 함께 삭제할 수 있습니다. - 삭제된 데이터 반환:
RETURNING
절을 사용하여 삭제된 데이터의 정보를 확인할 수 있습니다. - 트랜잭션 사용: 트랜잭션을 사용하여 삭제 작업을 안전하게 수행하고, 문제가 있으면
ROLLBACK
으로 되돌릴 수 있습니다.
이러한 방법을 통해 PostgreSQL에서 데이터를 안전하고 효율적으로 삭제할 수 있습니다.
'DB > PostgreSQL' 카테고리의 다른 글
[ PostgreSQL ] gp_dump - 백업 받기 (0) | 2024.10.18 |
---|---|
[ PostgreSQL ] ALTER USER - 사용자 비밀번호 변경하기 (0) | 2024.10.17 |
[ PostgreSQL ] RENAME, AS - Column 이름 변경하기 (0) | 2024.10.07 |
[ PostgreSQL ] UPDATE - 테이블 내 데이터 수정하기 (0) | 2024.10.07 |
[ PostgreSQL ] sub query - 서브 쿼리로 조회하기 (0) | 2024.10.07 |