yum 설치가 아닌 source make 설치라 디렉토리 구성 등이 다를 수 있습니다.

bash_profile

$ vi ~/.bash_profile

export POSTGRES_HOME=/home1/kimdubi/psql/engn/postgresql-11.7
export PGLIB=$POSTGRES_HOME/lib
export PGDATA=/home1/kimdubi/psql/engn/PGSQL
export MANPATH=$MANPATH:$POSTGRES_HOME/man

export PATH=$POSTGRES_HOME/bin:$PATH

postgresql.conf

#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -
listen_addresses = '*'
port = 3000
max_connections = 1000

#------------------------------------------------------------------------------
# RESOURCE USAGE (except WAL)
#------------------------------------------------------------------------------

# - Memory -
shared_buffers = 1024MB    
work_mem = 4MB   
maintenance_work_mem = 512MB 

dynamic_shared_memory_type = posix
effective_io_concurrency = 200

max_worker_processes=8
max_parallel_workers_per_gather = 2
max_parallel_workers = 8

#------------------------------------------------------------------------------
# WRITE AHEAD LOG
#------------------------------------------------------------------------------

# - Settings -
wal_level = logical
wal_buffers = 2MB
max_wal_size = 1GB

# - Archiving -
archive_mode = on
archive_command = 'cp %p /home1/kimdubi/psql/arch/testdb/%f'

#------------------------------------------------------------------------------
# QUERY TUNING
#------------------------------------------------------------------------------

random_page_cost = 1.1
default_statistics_target = 100
effective_cache_size = 3GB   # max. Physical M * 0.75

#------------------------------------------------------------------------------
# ERROR REPORTING AND LOGGING
#------------------------------------------------------------------------------

# - Where to Log -
log_destination = 'stderr'
logging_collector = on
log_directory = '/home1/kimdubi/psql/logs/testdb/error_log'
log_filename = 'alert_testdb.log'

# - What to Log -
log_line_prefix = '%t '

#------------------------------------------------------------------------------
# CLIENT CONNECTION DEFAULTS
#------------------------------------------------------------------------------

# - Statement Behavior -
search_path = '"$user"'
temp_tablespaces = 'TS_TEMP'

timezone='Asia/Seoul'
lc_messages = 'en_US.UTF-8' 
lc_monetary = 'en_US.UTF-8' 
lc_numeric = 'en_US.UTF-8' 
lc_time = 'en_US.UTF-8' 
default_text_search_config = 'pg_catalog.english'
  • shared_buffer : data buffer , 전체 서버 메모리의 1/4 ~ 1/3 권장
  • work_mem : sort,hash join 등 query 수행 시 사용하는 memory, tempfile 생성이 많으면 더 크게 설정 필요, session 마다 먹는 메모리가 아니라 각 쿼리 내 sort,hash join 작업 만큼 사용되는 메모리
    ex) 한 쿼리 내 sorting , hash join 이 한번 씩 발생하면 최대 work_mem * 2 만큼 메모리 사용됨
  • maintenance_work_mem : vacuum, create index 에 사용되는 메모리, 전체 서버 메모리의 1/16 ~ 2GB(max)
  • max_worker_processes : scan, group by, join 작업에 병렬처리를 지원함. parallel 처리를 수행하는 worker 프로세스의 최대 개수
  • max_parallel_workers_per_gather : 하나의 쿼리 당 수행 가능한 최대 worker 프로세스 개수 (defalut 0 - parallel 처리 수행 안함)
  • wal_level : WAL 파일에 기록되는 정보의 수준 설정 , mysql 로 비교하면 logical - ROW, replica - MIXED
  • wal_buffers : 트랜잭션 로그(WAL log) 버퍼 , shared_buffers 의 1/32 권장
  • archive_command : WAL file을 아카이브할 때 사용할 커맨드, %p 는 WAL 로그파일의 절대경로 %f 는 보관할 로그파일 이름
  • random_page_cost : random I/O cost 추정값으로 높으면 풀스캔 선호, 상대적으로 줄이면 인덱스 스캔을 선호함 default 4.0
  • effective_cache_size : query planner 에게 가용한 caching data의 크기를 알려줘서 cost 예측에 도움을 주는 설정. 값이 높다고 그만큼 memory를 점유하진 않고 index scan을 할 가능성이 높아짐, 전체 메모리의 3/4 권장 default 4GB

pg_hba.conf

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     trust
host    replication     all             127.0.0.1/32            trust
host    replication     all             ::1/128                 trust

=> postgresql 접속 인증 관련 설정으로 oracle 의 sqlnet.ora , cubrid의 broker.access & iplist 파일, mysql의 user@host 와 같은 개념

  • 예시 1) local 에서 모든 유저가 패스워드없이 (trust) 모든 데이터베이스에 접속 허용
# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   all             all                                     trust
  • 예시 2) 111.111.11.x 대역의 모든 호스트는 testdb DB에 testuser 계정으로 md5 인증방식으로만 접속 허용
# TYPE  DATABASE        USER            ADDRESS                 METHOD
  host   testdb         testuser        111.111.11.0/24           md5

참고 사이트