시작하며
PostgreSQL은 Oracle, MySQL과 같은 다른 DBMS에 비해 기본적으로 제공하는 내장 함수나 부가적인 기능들이 부족한 편입니다. 이를 보완하기 위해 PostgreSQL에서는 Extension 기능을 제공하고 있습니다. PostgreSQL Extension은 PostgreSQL의 기능을 확장해 주는 역할을 하며 이를 통하여 PostgreSQL Database에서 제공하지 않는 기능을 Plug-in 형태로 연결하여 손쉽게 사용할 수 있습니다.
Extension 구성 요소
Extension을 사용하기 위해서는 {PostgreSQL 엔진 경로}/share/extension
디렉토리에 다음과 같이 컨트롤 파일(.control)과 하나 이상의 SQL 스크립트 파일(.sql)이 있어야 합니다.
[root@tech-231 extension]$ pwd
/home/postgresdt/postgresql2/share/extension
[root@tech-231 ~] ls | grep pg_stat_monitor
pg_stat_monitor--1.0--2.0.sql
pg_stat_monitor--2.0.sql
pg_stat_monitor.control
{extension_name}.control 파일
- Extension의 설명 및 버전 등의 정보 등 메타 정보를 포함
{extension_name}.control
파일은 {PostgreSQL 엔진 경로}/share/extension 위치- 해당 파일의 파일명으로 사용된 extension_name은 Extension 사용하기 위해 수행하는 명령(
CREATE EXTENSION {extension_name}
)의 extension_name과 일치해야 함
{extension_name}--version.sql 파일
- Extension의 Source Code 파일로 Extension에서 제공하는 기능 및 동작들에 대한 실제 구현을 하는 파일
{extension_name}--version.sql
파일은 .control 파일이 있는 위치에 존재하거나 .control 파일에 .sql 파일의 위치를 정의- .sql 파일은 최소 한 개 이상 존재해야 함
Extension 설치
PostgreSQL Database를 설치한 방법에 따라 Extension 설치도 다릅니다. PostgreSQL Database를 Source Code로 설치한 경우와 Package Manager를 통하여 설치한 경우에 대해서 각각 Extension 설치 과정이 어떻게 다른지 확인해 보겠습니다.
📢 본 문서에서는 PostgreSQL에서 제공하는 기본 Extension 중pg_stat_statements
설치에 대해서만 설명합니다.
모든 기본 Extension은 pg_stat_statements 와 동일 방법으로 구현됩니다.
Source Code 설치
Source Code로 PostgreSQL Database를 설치한 경우, PostgreSQL에서 기본으로 제공하는 Extension은 Source File의 압축을 푼 경로에 contrib 하위 디렉토리에 존재합니다.
contrib 하위 디렉토리에서 설치하고자 하는 Extension을 확인 후 해당 디렉토리로 이동하여 Source File을 컴파일(make
)한 후 설치(make install
)할 수 있습니다.
Extension 종류에 따라서 Configuration 파일(postgresql.conf
) 수정이 필요할 수 있으며, PostgreSQL Database 재기동이 필요할 수 있습니다.
📢 앞으로 테스트를 진행할 PostgreSQL에 대한 환경 정보는 다음과 같습니다.
PostgreSQL 엔진 경로 : /home/postgres/PostgreSQL_Engine
기본 Extension 경로 : /home/postgres/PostgreSQL_Engine/contrib
PostgreSQL Data 경로 : /home/postgres/PostgreSQL_Data
Step 1. Extension이 위치하는 경로 이동
[postgres@tech-233 ~]$ cd /home/postgres/PostgreSQL_Engine/contrib/pg_stat_statements
[postgres@tech-233 pg_stat_statements]$ ls -al
drwxrwxr-x. 4 postgres postgres 106 Sep 21 16:01 .
drwxrwxr-x. 61 postgres postgres 4096 Sep 21 12:12 ..
drwxrwxr-x. 2 postgres postgres 6 Sep 21 12:12 expected
lrwxrwxrwx. 1 postgres postgres 66 Sep 21 12:12 Makefile -> /home/postgres/postgresql-15.4/contrib/pg_stat_statements/Makefile
drwxrwxr-x. 2 postgres postgres 6 Sep 21 12:12 sql
Step 2. Source File 컴파일(make)
[postgres@tech-233 pg_stat_statements]$ make
[postgres@tech-233 pg_stat_statements]$ ls -al
drwxrwxr-x. 4 postgres postgres 106 Sep 21 16:01 .
drwxrwxr-x. 61 postgres postgres 4096 Sep 21 12:12 ..
drwxrwxr-x. 2 postgres postgres 6 Sep 21 12:12 expected
lrwxrwxrwx. 1 postgres postgres 66 Sep 21 12:12 Makefile -> /home/postgres/postgresql-15.4/contrib/pg_stat_statements/Makefile
-rw-rw-r--. 1 postgres postgres 49048 Sep 21 16:01 pg_stat_statements.o
-rwxrwxr-x. 1 postgres postgres 44800 Sep 21 16:01 pg_stat_statements.so
drwxrwxr-x. 2 postgres postgres 6 Sep 21 12:12 sql
Step 3. 컴파일된 파일 설치(make install)
[postgres@tech-233 pg_stat_statements]$ make install
Step 4. PostgreSQL Configuration 파일 설정 후 PostgreSQL 재기동
[postgres@tech-233 pg_stat_statements]$ vi /home/postgres/PostgreSQL_Data/postgresql.conf
...
shared_preload_libraries = 'pg_stat_statements' # (change requires restart)
...
[postgres@tech-233 pg_stat_statements]$ /home/postgres/PostgreSQL_Engine/bin/pg_ctl -D /home/postgres/PostgreSQL_Data restart
Step 5. Database에 접속하여 pg_stat_statements Extenstion 생성 및 생성 확인
postgres=# CREATE EXTENSION pg_stat_statements ;
postgres=# \dx (또는 SELECT * FROM pg_extension ;)
List of installed extensions
Name | Version | Schema | Description
--------------------+---------+------------+------------------------------------------------------------------------
pg_stat_statements | 1.10 | public | track planning and execution statistics of all SQL statements executed
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
(2 rows)
Package Manager 설치
Package Manager를 통해 PostgreSQL Database를 설치한 경우, 기본 Extension을 가지는 contrib는 설치되지 않기 때문에 Package Manager를 통해 contrib를 설치한 후 사용할 수 있습니다. Extension 종류에 따라서 Configuration 파일(postgresql.conf
) 수정이 필요할 수 있으며, PostgreSQL Database 재기동이 필요할 수 있습니다.
📢 PostgreSQL PGDG yum Repository가 설치가 되어 있다는 전제에서 진행합니다.
Step 1. PostgreSQL 버전에 맞는 contrib 설치
[root@tech-233 ~] yum install -y postgresql15-contrib
Step 2. PostgreSQL Configuration 파일 설정 후 PostgreSQL 재기동
[root@tech-233 ~] vi /var/lib/pgsql/15/data/postgresql.conf
...
shared_preload_libraries = 'pg_stat_statements' # (change requires restart)
...
[root@tech-233 ~]$ systemctl restart postgresql-15
Step 3. Database에 접속하여 pg_stat_statements Extension 생성 및 생성 확인
postgres=# CREATE EXTENSION pg_stat_statements ;
postgres=# \dx (또는 SELECT * FROM pg_extension ;)
List of installed extensions
Name | Version | Schema | Description
--------------------+---------+------------+------------------------------------------------------------------------
pg_stat_statements | 1.10 | public | track planning and execution statistics of all SQL statements executed
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
(2 rows)
기본 제공 Extension 종류
PostgreSQL Database에서 기본으로 제공하는 Extension 종류는 pg_available_extensions Catalog
에서 확인할 수 있습니다. 기본 Extension의 종류는 PostgreSQL의 Version에 따라서 다를 수 있습니다.
Extension Name | Description |
adminpack | pgAdmin 및 기타 관리 도구에서 Server 로그 파일 원격 관리 등의 관리 기능을 제공 |
amcheck | Object에 구조적 손상과 논리적 손상 여부 확인을 통해 관계 무결성을 검증하는 기능을 제공 |
autoinc | Sequence의 필드 자동 증가 기능을 제공 |
bloom | 블륨 필터를 기반으로 인덱스가 집합에 속하는 지를 확인하여 인덱스 Access 방법 제공 |
btree_gin | GIN 테스트 및 다른 GIN 연산자 클래스 개발을 위한 GIN 연산자 관련 인덱스 제공 |
btree_gist | GiST 테스트 및 다른 GiST 연산자 클래스 개발을 위한 GiST 연산자 관련 인덱스 제공 |
citext | 대소문자를 구분하지 않는 문자열 Data 유형 지원 |
bloom | 다차원 큐브 형태의 Data 유형 지원 |
cube | 블륨 필터를 기반으로 인덱스가 집합에 속하는 지를 확인하여 인덱스 Access 방법 제공 |
dblink | Database 내에서 다른 Database로 연결하는 기능 제공 |
dict_int | 정수의 고유단어 텍스트 검색 사전 템플릿 제공(최대 자릿수, 매개변수 길이, 기호) |
dict_xsyn | 확장된 동의어 처리를 위한 텍스트 검색 사전 템플릿 제공 |
earthdistance | 지구 표면의 대원 거리 계산할 수 있는 기능 제공 |
file_fdw | Server의 파일시스템에 저장된 Data에 액세스를 위한 외부 Data 래퍼 기능 제공 |
fuzzystrmatch | 문자열 사이의 유사성과 거리를 결정할 수 있는 기능 제공. 비슷한 소리의 이름을 동일한 코드로 변경하거나 입력 문자열에 대한 대표 코드를 구성해서 유사도를 체크하는 기능 제공 |
hstore | (키, 값) 쌍 세트를 저장하기 위한 Data 유형 제공 |
insert_username | 누가 테이블을 변경했는지 사용자의 이름을 추적하는 기능 제공 |
intagg | 공급되는 정수를 정확히 포함하는 정수 배열을 생성하는 집계 함수 지원 |
intarray |
1차원 정수 배열에 대한 함수, 연산자 및 인덱스 지원 |
isn | EAN13, UPC, ISBN과 같은 ISN(Interational Standard Number)의 Data 유형 제공 |
lo | LO, BLOB와 같은 대형 객체 유지 관리 기능 제공 |
ltree | 계층적 트리형 구조의 라벨트리 검색 제공 및 Data 유형 제공 |
moddatetime | 테이블 내의 특정 Row의 마지막 수정 시간을 추적하는 기능 제공 |
old_snapshot | [Since. 14] old_snapshot_threshold 를 지원하는 유틸리티 제공 |
pageinspect | 디버깅 목적으로 유용한 낮은 수준에서 Database 페이지의 내용을 검사 기능 제공 |
pg_buffercache | Shared Buffer Cache 실시간 모니터링 기능 제공 |
pg_freespacemap | 여유 공간을 반환하는 FSM(Free Space Map) 검사 기능 제공 |
pg_prewarm | Data를 Buffer Cache에 로드하는 방법 제공 |
pg_stat_statements | 실행된 모든 SQL 문의 계획 및 실행 통계를 추적 기능 제공 |
pg_surgery | [Since. 14] 손상된 관계에 대한 조치를 위하여 강제 제거, 강제 고정 등의 함수 제공 |
pg_trgm | 트라이그램 기반으로 영문 및 숫자 텍스트 유사성 측정 및 인덱스 검색 기능 제공 |
pg_visibility | 비트 값 반환을 통해 VM 및 페이지 레벨의 가시성 정보를 검사하는 유틸리티 제공 |
pg_walinspect | [Since. 15] 낮은 수준의 PostgreSQL WAL(Write-Ahead Log) 내용을 검사하는 함수 지원 |
pgcrypto | 암호화 함수 제공 |
pgrowlocks | Row 수준 잠금 정보 표시 기능 제공 |
pgstattuple | 튜플 수준 통계 표시 기능 제공 |
plpgsql | PL/pgSQL 절차적 언어 지원 |
postgres_fdw | 원격 PostgreSQL Server 외부 Data 래퍼 기능 지원 |
refint | 참조 무결성 구현을 위한 함수 제공(외래 키 제약 조건을 확인) |
seg | 선분 또는 부동 소수점 간격을 나타내는 Data 유형 제공 |
sslinfo | PostgreSQL에 클라이언트가 제공한 SSL 인증서에 대한 정보 제공 |
tablefunc | Crosstab을 포함하여 전체 테이블을 조작하는 다양한 함수 지원 |
tcn | 연결된 테이블에 대하여 테이블 내용 변경시, 리스너에게 알림 기능 제공 |
tsm_system_rows | 테이블 샘플링 시, 반환할 Row 수를 제한하는 기능 제공 |
tsm_system_time | 테이블 샘플링 시, 밀리초 단위의 시간 내로 출력 가능한 샘플을 반환하도록 시간 제한하는 기능 제공 |
unaccent | 텍스트를 필터링하여 악센트를 제거하는 텍스트 검색 사전 제공 |
uuid-ossp | UUID(Universally Unique Identifier) 생성 기능 제공 |
xml2 | XPath Query 및 XSLT 제공 |
'엑셈 경쟁력 > DB 인사이드' 카테고리의 다른 글
DB 인사이드 | PWI - PostgreSQL Wait Interface (0) | 2024.05.27 |
---|---|
DB 인사이드 | PostgreSQL Extension - PG_HINT_PLAN (0) | 2024.04.18 |
DB 인사이드 | PostgreSQL 16 Release - New Feature (3) (2) | 2023.12.27 |
DB 인사이드 | PostgreSQL 16 Release - New Feature (2) (0) | 2023.11.30 |
DB 인사이드 | PostgreSQL 16 Release - New Feature (1) (2) | 2023.11.30 |
댓글