PostgreSQL의 기본 개념과 설치 방법을 알아봅니다.
PostgreSQL이란?
PostgreSQL은 오픈소스 객체-관계형 데이터베이스 관리 시스템(ORDBMS)입니다.
30년 이상의 역사를 가진 가장 진보된 오픈소스 RDBMS로, 표준 SQL 준수율이 높고 확장성이 뛰어납니다.
PostgreSQL vs MySQL vs Oracle 비교
| 항목 |
PostgreSQL |
MySQL |
Oracle |
| 라이선스 |
PostgreSQL License (MIT 유사) |
GPL + 상용 |
상용 |
| 가격 |
완전 무료 |
무료 (Community) |
고가 |
| SQL 표준 준수 |
매우 높음 |
보통 |
높음 |
| MVCC |
네이티브 |
InnoDB만 지원 |
Undo 기반 |
| JSON 지원 |
JSONB (바이너리, 인덱싱) |
JSON 타입 |
JSON 지원 |
| 배열 타입 |
네이티브 지원 |
미지원 |
VARRAY |
| 상속 |
테이블 상속 지원 |
미지원 |
미지원 |
| 확장성 |
사용자 정의 타입/연산자/함수 |
제한적 |
PL/SQL |
| 전문 검색 |
내장 (tsvector) |
FULLTEXT Index |
Oracle Text |
| 복제 |
스트리밍 복제 내장 |
바이너리 로그 복제 |
Data Guard |
설치
Windows
- PostgreSQL 다운로드 페이지에서 인스톨러 다운로드
postgresql-xx-windows-x64.exe 실행
- 설치 경로 지정 (기본:
C:\Program Files\PostgreSQL\17)
- 데이터 디렉토리 지정
- superuser(postgres) 비밀번호 설정
- 포트 설정 (기본: 5432)
- 로케일 설정 (Korean, Korea 또는 Default)
설치 확인
psql -U postgres
# 비밀번호 입력 후
SELECT version();
Mac
Homebrew를 이용한 설치
brew install postgresql@17
brew services start postgresql@17
# PATH 설정 (필요 시)
echo 'export PATH="/opt/homebrew/opt/postgresql@17/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
Postgres.app (GUI 방식)
Postgres.app 다운로드 후 Applications 폴더에 드래그하면 설치 완료됩니다.
Linux (Ubuntu/Debian)
sudo apt update
sudo apt install postgresql postgresql-contrib
# 서비스 시작
sudo systemctl start postgresql
sudo systemctl enable postgresql
# postgres 사용자로 접속
sudo -u postgres psql
Docker
docker run -d \
--name postgres \
-p 5432:5432 \
-e POSTGRES_PASSWORD=postgres123 \
-v pgdata:/var/lib/postgresql/data \
postgres:17
# 접속
docker exec -it postgres psql -U postgres
서비스 관리
| 기능 |
Windows |
Mac (Homebrew) |
Linux (systemd) |
| 시작 |
net start postgresql-x64-17 |
brew services start postgresql@17 |
sudo systemctl start postgresql |
| 중지 |
net stop postgresql-x64-17 |
brew services stop postgresql@17 |
sudo systemctl stop postgresql |
| 재시작 |
중지 후 시작 |
brew services restart postgresql@17 |
sudo systemctl restart postgresql |
| 상태 |
sc query postgresql-x64-17 |
brew services list |
sudo systemctl status postgresql |
접속 방법
psql (CLI)
# 로컬 접속
psql -U postgres
# 데이터베이스 지정 접속
psql -U postgres -d mydb
# 원격 접속
psql -h 192.168.1.100 -p 5432 -U postgres -d mydb
psql 주요 메타 명령어
| 명령어 |
설명 |
\l |
데이터베이스 목록 |
\c dbname |
데이터베이스 전환 |
\dt |
테이블 목록 |
\d tablename |
테이블 구조 |
\du |
사용자/롤 목록 |
\di |
인덱스 목록 |
\df |
함수 목록 |
\dn |
스키마 목록 |
\timing |
쿼리 실행 시간 표시 토글 |
\x |
확장 출력 모드 토글 |
\q |
psql 종료 |
\? |
메타 명령어 도움말 |
\h SELECT |
SQL 명령어 도움말 |
GUI 도구
| 도구 |
특징 |
가격 |
| pgAdmin |
PostgreSQL 공식 도구, 웹 기반 |
무료 |
| DBeaver |
다중 DB 지원, 범용 |
무료 (Community) |
| DataGrip |
JetBrains, 강력한 자동완성 |
유료 |
| Postico |
Mac 전용, 직관적 UI |
유료 |
| TablePlus |
다중 DB 지원, 깔끔한 UI |
유료 (무료 제한판) |
PostgreSQL 아키텍처 기본 용어
| 용어 |
설명 |
MySQL 대응 |
| Cluster |
PostgreSQL 인스턴스 (데이터 디렉토리) |
mysqld 인스턴스 |
| Database |
논리적 데이터 그룹 |
Database |
| Schema |
데이터베이스 내 네임스페이스 (기본: public) |
없음 (DB가 스키마 역할) |
| Tablespace |
물리적 저장 위치 |
없음 |
| Role |
사용자 + 그룹 통합 개념 |
User |
| WAL |
Write-Ahead Log (트랜잭션 로그) |
Binary Log / Redo Log |
| VACUUM |
죽은 튜플 정리 (MVCC 부산물) |
없음 (InnoDB 자동 처리) |
| TOAST |
대용량 데이터 자동 압축 저장 |
없음 |
관련된 글 (postgresql > lecture-postgresql)