본문 바로가기

개발 기록/개발 로그

[DB] PostgreSQL "permission denied for schema public" 문제 해결하기

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
 

이제 마이그레이션이 성공적으로 완료될 것입니다!