PostgreSQL

endsoul·2022년 1월 19일
0
post-thumbnail

설치

최근 버전은 데이터베이스 replication 기능을 지원한다.
컨테이너 실행 필수 환경 변수는 POSTGRES_PASSWORD이다.

docker run --name test-postgres \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=postgres \
-e POSTGRES_DB=dvdrental \
-v ~/volume/test_postgres:/var/lib/postgresql/data \
-p 5432:5432 \
-d postgres:14.1

환경 변수

  • POSTGRES_PASSWORD(Required): superuser 패스워드
  • POSTGRES_USER: superuser 아이디
  • POSTGRES_DB: 디폴트 데이터베이스 이름
  • POSTGRES_INITDB_ARGS: postgres initdb 커맨드에 전달할 인자(POSTGRES_INITDB_ARGS="--data-checksums")
  • POSTGRES_INITDB_WALDIR: 트랜잭션 로그를 저장할 Path(Default PGDATA에 설정된 경로)
  • POSTGRES_HOST_AUTH_METHOD: DB 접속 허용 권한 설정
  • PGDATA: 데이터베이스 파일들이 저장될 Path(Default /var/lib/postgresql/data)

Basic

DISTINCT

DISTINCT ON(expression)을 사용할 때는 항상 ORDER BY도 함께 사용한다. 그래야 예상 가능한 결과를 얻을 수 있다.

Date/Time

  • TIMESTAMP: 타임존 정보 없음
  • TIMESTAMPTZ: 타임존 정보 있음

INSERT

  • 타임존 정보 없으면 서버에 설정된 타임존 값을 참조해서 UTC로 변환해서 저장
  • 타임존 정보가 있으면 그 정보를 참조해서 UTC로 변환해서 저장
    따라서 타임존이 있는 시간 정보 데이터 타입은 모두 UTC로 변환해서 저장한다.

SELECT

  • 타임존 정보가 있는 데이터 타입은 UTC에서 서버 타임존으로 변환한다.
  • 타임존 정보가 없는 데이터 타입은 저장된 값 그대로 반환한다.

Foreign Key

ON DELETE

  • NO ACTION
  • CASCADE
  • SET NULL

기존 테이블에 외래키를 변경해야 한다면 외래키 CONSTRAINT를 제거하고 새로 생성해야 한다.

UNION Operator

  • 칼럼 개수가 동일해야 함
  • 칼럼 타입이 서로 호환되야 함

CTEs

복잡한 조인과 서브 쿼리를 더 단순하게 만들기 위해 사용한다.

Data Structure

Hiararchica Data

Self-Join 직계 조상, 자식만 알 수 있다.

Performance

SELECT문에 * 을 사용하지 않는다. Application에서 꼭 필요한 데이터만 조회한다.
그렇지 않으면 데이터베이스 서버의 리소스를 불필요하게 사용하고, Application과 데이터베이스 서버 사이에 네트워크 트래픽도 증가한다.

Join에 4개의 테이블을 사용했다면 조인 프로세싱은 3번 발생한다. n은 테이블 개수 (n - 1).

참조

Official PostgreSQL Docker
PostgreSQL Tutorial
Hierarchical Data

0개의 댓글