데이터베이스 기술/POSTGRESQL

PostgreSQL Extension 소개

(주)비트나인 2023. 8. 28. 17:23

블로그 글을 보시기 전에 2024년 비트나인의 첫 번째 월간 백서인

'오픈소스 DB 전성시대, PostgreSQL을 선택하는 이유'를 읽어보세요!

 

 지금 다운로드하기!


 

PostgreSQL에서는 Extension이라는 기능을 기반으로 DB에서 제공하지 않는 기능을 사용자가 생성 후 설치하여 DB에서 기본 제공되는 함수처럼 사용할 수 있습니다. 

 

이 문서는 Extension 에 대해 설명하고 이해하기 위해 포괄적으로 소개하기 위한 문서이며 다음 섹션을 통해 살펴보겠습니다.

 

  1. Extension
  2. Extension 생성 방법
  3. Extension 설치 방법
  4. Extension 소개



Extension

 

세계적으로 가장 많이 사용하고 있는 RDBMS 인 ORACLE 뿐 만 아니라 MySQL, SQL Server 등의 다른 RDBMS 들 모두 DB 내에서 제공하는 강력한 기능들을 가지고 있습니다.  지원하는 내장함수 및 부가적인 옵션도 많고, 성능도 좋으며, 대용량 처리에서도 성능이 좋습니다. 

 

PostgreSQL 은 이러한 RDBMS 들에 비해서 기본적으로 제공하는 내장함수나 기능이 부족한 점은 있지만 이를 보완할 수 있도록 Extension이라는 기능을 제공합니다. Extension을 통해서 외부 프로그램을 plug-in 형태로 PostgreSQL에 설치 및 연동할 수 있으며, 이를 사용하여 PostgreSQL에서 제공하지 않는 추가적인 기능을 마치 기본 제공하는 기능처럼 작동 및 사용할 수 있습니다. 

 

Extension 은 CREATE EXTENSION, DROP EXTENSION, ALTER EXTENSION 명령어로 설치, 삭제 및 변경할 수 있으며, PostgreSQL 에서 바이너리 배포판에 기본적으로 포함되는 Extension 들에 대한 공식 매뉴얼은 하기 링크에서 확인 가능합니다. 

 

PG14 공식 매뉴얼 참조(https://www.postgresql.org/docs/14/contrib.html)

PG15 공식 매뉴얼 참조(https://www.postgresql.org/docs/15/contrib.html)




Extension 생성 방법

 

Extension 을 생성하기 위해서는 기본적으로 아래 3가지 파일이 필요합니다.

 

*.control 

 

Extension 의 메타정보를 나타내며, Extension 에 대한 설명 및 버전 등의 정보가 기입된 파일입니다.

 

*.sql

 

Extension 의 Source Code 를 나타내며, Extension 에서 제공하는 기능 및 동작들에 대한 실제 구현을 하는 파일입니다.

 

Makefile

 

Extension 의 Build 정보를 나타내며, 프로그램의 빌드과정을 표준 문법으로 기술한 파일로서 make 에게 어떤 프로그램을 컴파일하고 링크해야 하는지 에 대한 방법을 설명한 파일입니다.



  Tip    
     
  *.sql 내부에서 pl/pgsql 로 작성하여 간단하게 Extension 을 생성할 수 있지만, C 언어로 함수를 작성하고 sql 파일에서 *.c 파일을 참조하도록 하여 Extension 의 성능을 높일 수 있습니다.




Extension 설치 방법

기본 배포 Extension

 

PostgreSQL에서 같이 기본적으로 배포되는 Extension 들은 PostgreSQL 매뉴얼에서 확인 가능하며, 이 Extension 들은 간단하게 CREATE EXTENSION ... 명령어를 사용해서 설치 가능합니다.

 

# 설치 가능한 Extension 목록 확인
SELECT * FROM pg_available_extensions;

# pg_stat_statements Extension 설치
CREATE EXTENSION pg_stat_statements;

# 설치된 Extension 확인
SELECT * FROM pg_extension;
\dx


Other Extension

 

Extension 관련 github에서 Source Code를 다운로드 후 compile 하여 사용합니다.

# pgsentinel github 에서 source code 다운로드
git clone https://github.com/pgsentinel/pgsentinel.git

# source code compile
cd pgsentinel/src
make
make install

=> build 된 프로그램을 실행할 수 있게 파일들을 $PGDATA/share/postgresql/extension 경로에 복사를 합니다.

  • make 

Makefile을 이용하여 Source Compile => Source file 을 사용자가 실행 가능한 파일로 만들어 주는 과정을 말하며, make 과정이 끝나면 설치파일(Setup 파일 같은 것) 이 생성된 상태라고 볼 수 있습니다.

 

  • make install

make를 통해서 만들어진 설치파일을 설치하는 과정이며, build 된 프로그램을 실행할 수 있게 파일들을 알맞은 위치($PGDATA/share/postgresql/extension)에$PGDATA/share/postgresql/extension) 복사를 합니다.

 

Extension 중에는 shared_preload_libraries 파라미터를 설정한 후, DB를 재기동해야 정상적으로 사용할 수 있는 Extension 도 있습니다.

 

# postgresql.conf 수정
vi $PGDATA/postgresql.conf

shared_preload_libraries = ‘pg_stat_statements,pgsentinel’

# DB 재기동
pg_ctl stop -D $PGDATA
pg_ctl start -D $PGDATA

SELECT * FROM pg_stat_statements;
SELECT * FROM pg_active_session_history;

 

Extension 소개

기본 배포용 Extension

 

PostgreSQL의 바이너리 배포판에 기본 배포용으로 포함되는 Extension 의 개수는 PG14 기준 47개, PG15 기준 50개 입니다. 아래 표에는 기본 배포용 Extension 중 자주 사용하는 Extension 에 대한 설명이 있습니다.

 

Extension 분류 설명
xml2 개발편의성 XML 자료형에 대한 path 기능을 사용할 수 있도록 주로 XPath 관련 함수들을 제공합니다.
pgcrypto 보안 암호화 함수를 제공합니다.
pg_stat_statements 모니터링 서버에서 실행된 질의들의 통계 정보를 제공합니다. 서버에서 실행되는 모든 SQL 문의 실행 통계를 추적하는 수단을 제공합니다.
pg_statsinfo 모니터링 데이터베이스의 상태 및 통계자료를 모니터링하고 수집합니다.
pg_buffercache 모니터링 공유 메모리 영역을 Query 로 살펴볼 수 있는 함수들을 제공합니다. 공유 버퍼캐시에서 일어나는 작업을 실시간으로 검사하기 위한 수단을 제공합니다.
pg_hint_plan 성능개선 사용자가 Query 에 Hint 를 사용하여 실행계획을 제어할 수 있습니다.
pg_prewarm 성능개선 데이터를 buffer cache 에 로드하는 방법을 제공합니다.
file_fdw 빅데이터 및 기타 I/F 서버의 파일시스템에 저장된 데이터에 액세스하는 데 사용되는 외부 데이터 래퍼를 제공합니다.
dblink 외부 RDB I/F 원격 데이터베이스에서 쿼리를 수행하기 위한 확장 모듈로 다른 데이터베이스의 데이터를 이용할 수 있습니다.
multicorn 외부 RDB I/F 범용 이기종 데이터베이스의 데이터 연결을 위한 Link 로 Foreign Table 과 1:1 로 mapping 됩니다.
oracle_fdw 외부 RDB I/F Oracle DB 데이터 연결을 위한 Link 로 Foreign Table 과 1:1 로 mapping 됩니다.

Other Extension

 

Extension 은 필요한 기능을 누구나 만들고 배포할 수 있습니다. 따라서 PostgreSQL 의 많은 사용자들은 DB에서 제공하지 않는 유용한 기능들을 자체적으로 생성하였습니다. 

 

아래 표는 PostgreSQL 바이너리 배포판에 기본적으로 포함되지는 않지만 유용한 Extension에 대한 설명입니다.

 

Extension 분류 설명
PostGIS 개발편의성 지리 정보(GIS)를 저장하고 처리하기 위한 공간 데이터베이스 Extension 으로 지리 데이터 저장, 검색 및 분석이 가능하고, 인덱싱 및 쿼리 지원을 추가하며 관련 함수들을 제공합니다.
citus 확장성
성능개선
분산 데이터베이스 기능(Sharding)을 추가하여 대용량 데이터베이스를 더 효율적으로 처리할 수 있으며, 데이터베이스 성능을 향상시키고 확장성을 강화할 수 있습니다.
pgsentinel 모니터링 Active Session History 를 기록하고 활동을 쿼리 통계(pg_stat_statements)와 연결하는 기능을 제공합니다.
pg_cron 스케쥴 PostgreSQL 데이터베이스 내에서 스케줄된 작업을 실행하기 위한 기능을 제공합니다.
MADlib ML DB 내에서 머신러닝을 활용하고자 하는 경우에 유용한 Extension 으로 데이터 분석 및 예측 모델을 구축하고 실행할 수 있습니다.
pg_gpt AI OpenAI의 GPT-3 API를 사용하여 자연어에서 SQL 쿼리를 생성이 가능하고 SQL 쿼리 및 쿼리 계획을 자연어로 설명할 수 있습니다.
pg_hint_plan 성능개선 쿼리 실행 계획을 제어하고 최적화하기 위한 Extension 으로 쿼리 옵션을 통해 쿼리 계획 생성자에게 힌트를 제공하여 원하는 실행 계획을 유도하거나 최적화할 수 있도록 도와줍니다.

 


글 : 조민우 수석보 ( 비트나인 DB Tech팀 )