블로그 글을 보시기 전에 2024년 비트나인의 첫 번째 월간 백서인
'오픈소스 DB 전성시대, PostgreSQL을 선택하는 이유'를 읽어보세요!
PostgreSQL에서는 Extension이라는 기능을 기반으로 DB에서 제공하지 않는 기능을 사용자가 생성 후 설치하여 DB에서 기본 제공되는 함수처럼 사용할 수 있습니다.
이 문서는 Extension 에 대해 설명하고 이해하기 위해 포괄적으로 소개하기 위한 문서이며 다음 섹션을 통해 살펴보겠습니다.
- Extension
- Extension 생성 방법
- Extension 설치 방법
- 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팀 )
'POSTGRESQL' 카테고리의 다른 글
PostgreSQL성능진단표준가이드 (0) | 2023.08.29 |
---|---|
PostgreSQL을 C언어로 사용해보자. (0) | 2023.08.28 |
가장 많이 사용하는 PostgreSQL의 오픈소스 익스텐션은? (0) | 2023.08.28 |
Vacuum이해와 사용법 (0) | 2023.08.28 |
PostgreSQL의 Advanced Feature(Table Inheritance)의 효율적인 사용 방법 (0) | 2023.08.21 |