개발

Heroku postgresql 무료 플랜 지원 중단 - Heroku psql 데이터베이스 내보내기

jungwon_ 2022. 10. 6. 23:26

나는 개인 프로젝트의 방문자 통계를 위해 Umami를 사용중이다.

 

Umami는 psql을 사용하는데, 데이터베이스 및 웹 호스팅을 위해 Heroku를 사용하고 있었다.

 

그런데 Heroku에서 2022년 11월 28일부터 더이상 Heroku Dynos, Heroku Postgres, Heroku Data for Redis의 무료 플랜을 지원하지 않는다고 한다.

 

기존에 hobby plan(무료 플랜)을 사용해서 부담없이 사용하고 있었는데, 작은 사이드 프로젝트를 위해 유료 플랜을 사용하는 것이 조금 부담스럽다는 생각이 들었다.

 

그래서 우선 Heroku에 저장된 데이터베이스를 로컬 데이터베이스로 옮기기로 했다.

 

Heroku에서 공식적으로 제공하는 문서에서 데이터베이스를 내보내는 방법을 확인할 수 있다.

 

https://devcenter.heroku.com/articles/heroku-postgres-import-export

 

Importing and Exporting Heroku Postgres Databases | Heroku Dev Center

Last updated August 23, 2022 Table of Contents On the surface, PG Backups provides a way to capture regular backups of your Heroku Postgres database. However, because of its general-purpose architecture and use of standard PostgreSQL utilities, it is also

devcenter.heroku.com

 

아래는 Heroku postgres에서 데이터베이스 백업을 다운로드하고 로컬 데이터베이스로 옮기는 과정을 정리했다.


우선 heroku-postgresql에 접속해서 Durability - MANUAL BACKUPS & DATA EXPORTS에서 데이터를 export 해준다.

그런 다음 Download를 눌러 다운로드 해준다.

 

로컬 데이터베이스로 옮기려면 컴퓨터에 postgresql이 설치되어있어야 한다. [설치 링크]

 

나는 윈도우를 사용하므로 윈도우 기준으로 설명하겠다.

 

터미널에서 Postgres 툴을 사용하기 위해서는 PATH 환경 변수 설정을 해줘야한다.

 

윈도우 검색에서 시스템 환경 변수 편집을 검색하고 환경 변수 - 시스템 변수 - PATH에 postgresql 를 추가해준다.

보통 C:\Program Files\PostgreSQL\14\bin\ 에 설치되긴 하지만 다른 곳에 설치되어 있을 수도 있으니 본인에게 맞는 경로로 추가하면 된다.

 

그러면 이제 powershell에서 Postgres 툴을 사용할 수 있다.

로컬에 저장할 데이터베이스가 있으면 그 곳으로 바로 옮겨도 되고, 아니라면 새로운 데이터베이스를 생성해준다.

 

나는 umami 데이터베이스를 위해 새로운 데이터베이스를 생성해줬다.

createdb -U [username] [dbname]
createdb -U postgres umamidb

powershell에서 명령어를 실행하니 윈도우 유저 이름으로 접근해서 오류가 났다. 그래서 유저 이름을 명시해줬다.

 

이제 backup파일을 저장한 경로로 가서 아래 명령어를 실행한다.

pg_restore --verbose --clean --no-acl --no-owner -h localhost -U [username] -d [dbname] [filepath]

 

heroku 글에서는 아래와 같이 적혀있는데, heroku에서 파일을 다운로드했을때 .dump 로 파일명이 끝나지 않았다. 그냥 저장된 파일이름 그대로 입력해주면 되는 듯하다.

pg_restore --verbose --clean --no-acl --no-owner -h localhost -U myuser -d mydb latest.dump

이제 제대로 옮겨졌는지 확인한다.

확인 결과 모든 데이터가 복구된 것을 확인할 수 있었다.

 

참고로 각 테이블의 데이터를 조회하려면 아래 명령어를 실행하면 된다.

SELECT * FROM [tabelname];

Reference

- Importing and Exporting Heroku Postgres Databases - Heroku Dev Center