이제 이미 만들어진 테이블을 어떻게 바꿀 수 있는지 얘기해볼게. 프로젝트 하다 보면 뭔가 영원히 안 바뀌는 경우는 거의 없어 — 요구사항은 진짜 갑자기, 마치 bombaridilokrokodilo처럼 날아올 수도 있거든. 예를 들어, 프로덕트 매니저가 갑자기 모든 유저마다 프로필 배경색의 유니크한 아이디가 필요하다고 할 수도 있고, 아니면 VARCHAR(50)으로 이름 저장하는 게 너무 짧다고 느낄 수도 있어. 이미 "Bombaridilokrokodilo-Junior-Third"라는 유저가 있다면 더더욱!
이럴 때 PostgreSQL에서는 ALTER TABLE이라는 도구가 있어.
ALTER TABLE은 기존 테이블 구조를 바꿀 수 있게 해주는 명령어야. 이걸로 할 수 있는 건:
- 새 컬럼 추가하기;
- 필요 없는 컬럼 삭제하기;
- 컬럼의 데이터 타입 바꾸기;
- 테이블이나 컬럼 이름 바꾸기;
NOT NULL,UNIQUE같은 제약조건 추가/삭제 등등.
비유하자면, 이미 집(테이블)을 지었는데 방(컬럼)을 새로 만들거나, 필요 없는 창고(컬럼)를 없애는 거랑 비슷해.
ALTER TABLE 문법
명령어 구조는 꽤 직관적이야:
ALTER TABLE 테이블
변경_행동;
여기서:
테이블— 바꾸고 싶은 테이블 이름;-
변경_행동— 실제로 하고 싶은 행동 (예: 컬럼 추가, 삭제, 데이터 타입 변경 등).
ALTER TABLE 사용 예시
새 컬럼 추가하기
테이블에 새 컬럼을 추가하고 싶으면 ADD COLUMN을 써. 예를 들어:
ALTER TABLE students
ADD COLUMN email VARCHAR(100);
이 명령어는 students 테이블에 email이라는 새 컬럼을 추가해. 여기엔 학생 이메일 주소가 들어가고, 데이터 타입은 최대 100글자짜리 문자열이야.
예를 들어, 학생 테이블을 만들었는데 입학 날짜를 깜빡하고 안 넣었을 수도 있지. 그럴 땐 이렇게 하면 돼:
ALTER TABLE students
ADD COLUMN enrollment_date DATE;
이제 enrollment_date 컬럼이 생겨서 입학 날짜를 저장할 수 있어.
컬럼 삭제하기
어떤 컬럼이 더 이상 필요 없으면 DROP COLUMN을 써. 예를 들어:
ALTER TABLE students
DROP COLUMN email;
이 명령어는 students 테이블에서 email 컬럼을 삭제해. 참고로 이 컬럼에 있던 데이터도 복구 불가로 같이 사라진다는 점 주의!
중요한 포인트:
만약 삭제하려는 컬럼이 다른 테이블에서(예: 외래키로) 쓰이고 있으면, PostgreSQL이 에러를 낼 수 있어. 이런 경우엔 먼저 의존성을 정리해야 해.
컬럼 데이터 타입 바꾸기
처음에 컬럼 데이터 타입을 잘못 정했을 수도 있지. 예를 들어, 학생 나이를 SMALLINT로 했다가 나중에 BIGINT로 바꾸고 싶을 때는 이렇게 해:
ALTER TABLE students
ALTER COLUMN age TYPE BIGINT;
중요한 포인트: 이미 데이터가 들어가 있으면 PostgreSQL이 새 타입으로 변환 가능한지 체크해. 불가능하면 에러가 나.
예를 들어, description 컬럼을 VARCHAR(100)으로 만들었는데, 나중에 코스 설명이 훨씬 길어질 수 있다는 걸 알게 됐어. 그럴 땐 데이터 타입을 TEXT로 바꿔:
ALTER TABLE courses
ALTER COLUMN description TYPE TEXT;
이제 코스 설명을 길이 제한 없이 저장할 수 있어.
컬럼 이름 바꾸기
컬럼 이름을 바꾸고 싶으면 RENAME COLUMN을 써:
ALTER TABLE students
RENAME COLUMN name TO full_name;
이제 name 컬럼이 full_name으로 바뀌었어.
테이블 이름 바꾸기
테이블 이름도 바꿀 수 있어. RENAME TO 명령어를 써:
ALTER TABLE students
RENAME TO university_students;
이제 students 테이블이 university_students로 이름이 바뀌었어.
NOT NULL 제약조건 추가/삭제
컬럼을 만들었는데 필수(NOT NULL)로 안 했을 수도 있지. 걱정 마! 나중에 제약조건을 추가할 수 있어:
ALTER TABLE students
ALTER COLUMN name SET NOT NULL;
NOT NULL 제약조건을 빼고 싶으면 DROP NOT NULL을 써:
ALTER TABLE students
ALTER COLUMN name DROP NOT NULL;
기본값 설정하기
이미 있는 컬럼에 기본값을 주고 싶으면 SET DEFAULT를 써:
ALTER TABLE enrollments
ALTER COLUMN enrollment_date SET DEFAULT CURRENT_DATE;
기본값을 없애고 싶으면 이렇게 해:
ALTER TABLE enrollments
ALTER COLUMN enrollment_date DROP DEFAULT;
각 명령어는 다음 세 번의 강의에서 더 자세히 다룰 거야. 기대해 :)
ALTER TABLE 쓸 때 흔한 실수
ALTER TABLE 쓸 때 에러가 날 수 있어. 대표적인 실수는 이거야:
현재 데이터랑 호환 안 되는 데이터 타입으로 바꾸려고 할 때. 예를 들어, age 컬럼에 이미 데이터가 있는데 이걸 VARCHAR로 바꾸려 하면 에러가 나. 해결법: 먼저 데이터를 지우거나 변환해.
외래키나 인덱스로 쓰이는 컬럼을 삭제하려고 할 때. PostgreSQL은 데이터 무결성을 위해 그냥 삭제 못 하게 막아. 의존 컬럼을 먼저 정리해야 해.
문법 실수. ALTER TABLE은 꽤 유연하지만 문법을 정확히 지켜야 해. 예를 들어, ADD COLUMN에는 데이터 타입이 꼭 들어가야 해.
실전에서 ALTER TABLE 쓰는 경우
실제로 ALTER TABLE은 진짜 자주 써. 예를 들면:
- 기존 테이블에 새 데이터(컬럼 등) 추가할 때;
- DB 최적화(예: 데이터 타입 바꿔서 메모리 절약)할 때;
- 설계 실수 수정(예: 제약조건 빼먹거나 데이터 타입 잘못 정했을 때).
이제 ALTER TABLE이 얼마나 강력한지 알겠지? 프로젝트에서 변화에 대응할 수 있게 해주는 진짜 강력한 도구야. 중요한 건 — 항상 신중하게, 급하게 하지 말고, 괜히 "집" (네 테이블)을 망가뜨리지 않게 조심하자!
GO TO FULL VERSION