1. 문제 상황
Django 프로젝트에서 PostgreSQL 데이터베이스를 사용하기 위해 마이그레이션을 실행하는 중 다음과 같은 오류가 발생했습니다:
django.db.utils.ProgrammingError: permission denied for schema public LINE 1: CREATE TABLE "django_migrations" ("id" bigint NOT NULL PRIMA...
이 오류는 PostgreSQL 사용자 계정에 데이터베이스와 public 스키마에 대한 필요한 권한이 없을 때 발생합니다. Django가 public 스키마 내에 테이블을 생성하려 하지만 권한이 없어서 실패한 것이죠.
2. 문제 원인
PostgreSQL에서 데이터베이스와 스키마의 권한은 기본적으로 제한적으로 부여됩니다. 특정 사용자에게 아래와 같은 권한이 부족하면 문제가 발생합니다:
- 스키마 사용 권한(USAGE)
- 스키마 내 테이블 생성 권한(CREATE)
- 데이터베이스 소유권
3. 해결 방법
문제를 해결하기 위해 PostgreSQL에 접속하여 필요한 권한을 설정합니다.
1) PostgreSQL에 접속
터미널 또는 SSH를 통해 PostgreSQL에 접속합니다:
sudo -u postgres psql
2) 데이터베이스 소유자 변경
Django 프로젝트에서 사용하는 데이터베이스의 소유자를 프로젝트 사용자(admin)로 변경합니다:
ALTER DATABASE mint OWNER TO admin;
3) 데이터베이스 권한 부여
데이터베이스에 대한 모든 권한을 admin 사용자에게 부여합니다:
GRANT ALL PRIVILEGES ON DATABASE mint TO admin;
4) 스키마 권한 부여
public 스키마에 대해 접근 및 생성 권한을 부여합니다:
GRANT USAGE, CREATE ON SCHEMA public TO admin;
5) 모든 테이블 권한 부여
이미 존재하는 모든 테이블에 대한 권한도 부여합니다:
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO admin;
4. 최종 확인 및 마이그레이션 실행
권한 설정이 완료되었으면 Django 프로젝트 루트 디렉토리에서 다시 마이그레이션을 실행합니다:
python manage.py migrate
이제 마이그레이션이 성공적으로 완료될 것입니다!
'개발 기록 > 개발 로그' 카테고리의 다른 글
[DB] PostgreSQL 외부 접속 허용하기 (Connection refused: no further information) (0) | 2025.01.11 |
---|---|
[JS] 성능 최적화를 위한 데이터 구조 선택 (with reduce, find) (0) | 2025.01.08 |
[토비의 스프링 정리] #5 서비스 추상화 리뷰 및 기록 (0) | 2023.04.27 |
Ep 3. HTML / CSS 입문 30일 챌린지(마무리) - 독학 개발 공부 (1) | 2023.01.30 |
[git 에러] refusing to allow a Personal Access Token to create or update workflow (0) | 2023.01.27 |