다음을 통해 공유


Azure Database for PostgreSQL - 유연한 서버의 PostgreSQL 확장

적용 대상: Azure Database for PostgreSQL - 유연한 서버

Azure Database for PostgreSQL 유연한 서버는 확장을 사용하여 데이터베이스의 기능을 확장하는 기능을 제공합니다. 확장은 명령을 사용하여 데이터베이스에서 로드하거나 제거할 수 있는 단일 패키지에서 여러 관련 SQL 개체를 번들로 묶습니다. 데이터베이스에 로드된 후에 확장은 기본 제공 기능으로 작동할 수 있습니다.

PostgreSQL 확장을 사용하는 방법

Azure Database for PostgreSQL 유연한 서버에 확장을 설치하려면 먼저 이러한 확장을 사용하도록 허용 목록에 추가해야 합니다.

Azure Portal 사용:

  1. Azure Database for PostgreSQL 유연한 서버 인스턴스를 선택합니다.
    1. 리소스 메뉴의 설정 섹션에서 서버 매개 변수를 선택합니다.
    2. azure.extensions 매개 변수를 검색합니다.
    3. 허용 목록에 추가하려는 확장을 선택합니다. Azure Database for PostgreSQL 유연한 서버 - 설치를 위한 허용 목록 확장을 보여 주는 스크린샷.

Azure CLI 사용:

CLI 매개 변수 설정 명령을 통해 확장을 허용 목록에 추가할 수 있습니다.

az postgres flexible-server parameter set --resource-group <resource_group>  --server-name <server> --subscription <subscription_id> --name azure.extensions --value <extension_name>,<extension_name>

ARM 템플릿 사용: 다음 예는 이름이 postgres-test-server인 서버의 확장 dblink, dict_xsyn, pg_buffercache를 허용 목록에 추가합니다.

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "flexibleServers_name": {
            "defaultValue": "postgres-test-server",
            "type": "String"
        },
        "azure_extensions_set_value": {
            "defaultValue": " dblink,dict_xsyn,pg_buffercache",
            "type": "String"
        }
    },
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.DBforPostgreSQL/flexibleServers/configurations",
            "apiVersion": "2021-06-01",
            "name": "[concat(parameters('flexibleServers_name'), '/azure.extensions')]",
            "properties": {
                "value": "[parameters('azure_extensions_set_value')]",
                "source": "user-override"
            }
        }
    ]
}

shared_preload_libraries는 Azure Database for PostgreSQL 유연한 서버가 시작될 때 로드해야 하는 라이브러리를 결정하는 서버 구성 매개 변수입니다. 공유 메모리를 사용하는 모든 라이브러리는 이 매개 변수를 통해 로드되어야 합니다. 공유 사전 로드 라이브러리에 확장을 추가해야 하는 경우 다음 단계를 따릅니다.

Azure Portal 사용:

  1. Azure Database for PostgreSQL 유연한 서버 인스턴스를 선택합니다.
    1. 리소스 메뉴의 설정 섹션에서 서버 매개 변수를 선택합니다.
    2. shared_preload_libraries 매개 변수를 검색합니다.
    3. 추가하려는 라이브러리를 선택합니다.
 :::image type="content" source="./media/concepts-extensions/shared-libraries.png" alt-text="Screenshot showing Azure Database for PostgreSQL -setting shared preload libraries parameter setting for extensions installation." lightbox="./media/concepts-extensions/shared-libraries.png":::
```Using [Azure CLI](/cli/azure/):

   You can set `shared_preload_libraries` via CLI [parameter set](/cli/azure/postgres/flexible-server/parameter?view=azure-cli-latest&preserve-view=true) command.

   ```azurecli
az postgres flexible-server parameter set --resource-group <resource_group>  --server-name <server> --subscription <subscription_id> --name shared_preload_libraries --value <extension_name>,<extension_name>

확장 만들기

확장이 허용 목록에 추가되고 로드된 후에는 해당 확장을 사용하려는 각 데이터베이스에 설치해야 합니다.

  1. 확장을 만들려면 사용자가 역할의 azure_pg_admin 멤버여야 합니다. 역할의 멤버는 azure_pg_admin 다른 사용자에게 확장을 만들 수 있는 권한을 부여할 수 있습니다.
  2. 특정 확장을 설치하려면 CREATE EXTENSION 명령을 실행해야 합니다. 이 명령은 패키지 개체를 데이터베이스에 로드합니다.

참고 항목

Azure Database for PostgreSQL 유연한 서버에서 제공되는 타사 확장은 오픈 소스 라이선스 코드입니다. 현재 프리미엄 또는 독점 라이선스 모델을 사용하는 타사 확장 또는 확장 버전은 제공하지 않습니다.

Azure Database for PostgreSQL 유연한 서버 인스턴스는 다음 표에 나열된 주요 PostgreSQL 확장의 하위 집합을 지원합니다. 이 정보를 SHOW azure.extensions;를 실행하여 얻을 수도 있습니다. 이 문서에 나열되지 않은 확장은 Azure Database for PostgreSQL 유연한 서버에서 지원되지 않습니다. Azure Database for PostgreSQL 유연한 서버에서 사용자 고유의 확장을 만들거나 로드할 수는 없습니다.

확장 버전

다음 확장은 Azure Database for PostgreSQL 유연한 서버에서 사용할 수 있습니다.

참고 항목

다음 표에서 ✔️ 표시가 있는 확장은 shared_preload_libraries 서버 매개 변수에서 해당 라이브러리를 사용하도록 설정해야 합니다.

확장 이름 설명 PostgreSQL 17 PostgreSQL 16 PostgreSQL 15 PostgreSQL 14 PostgreSQL 13 PostgreSQL 12 PostgreSQL 11
address_standardizer 주소를 구성 요소로 구문 분석하는 데 사용됩니다. 일반적으로 지오코딩 주소 정규화 단계를 지원하는 데 사용됩니다. 3.5.0 3.3.3 3.3.1 3.2.3 3.2.3 3.2.3 3.2.3
address_standardizer_data_us Address Standardizer US 데이터 세트 예제 3.5.0 3.3.3 3.3.1 3.2.3 3.2.3 3.2.3 3.2.3
age (미리 보기) 그래프 데이터베이스 기능 제공 해당 없음 1.5.0 ✔️ 1.5.0 ✔️ 1.5.0 ✔️ 1.5.0 ✔️ 해당 없음 해당 없음
amcheck 관계 무결성을 확인하는 함수 1.4 1.3 1.3 1.3 1.2 1.2 1.1
anon(미리 보기) 데이터 익명화 도구 1.3.2 ✔️ 1.3.2 ✔️ 1.3.2 ✔️ 1.3.2 ✔️ 1.3.2 ✔️ 1.3.2 ✔️ 1.3.2 ✔️
azure_ai PostgreSQL에 대한 Azure AI 및 ML 서비스 통합 해당 없음 1.1.0 1.1.0 1.1.0 1.1.0 1.1.0 해당 없음
azure_storage PostgreSQL에 대한 Azure 통합 해당 없음 1.5 ✔️ 1.5 ✔️ 1.5 ✔️ 1.5 ✔️ 1.5 ✔️ 해당 없음
bloom 블룸 액세스 메서드 - 서명 파일 기반 인덱스 1.0 1.0 1.0 1.0 1.0 1.0 1.0
btree_gin GIN의 공통 데이터 형식 인덱싱 지원 1.3 1.3 1.3 1.3 1.3 1.3 1.3
btree_gist GiST의 공통 데이터 형식 인덱싱 지원 1.7 1.7 1.7 1.6 1.5 1.5 1.5
citext 대/소문자를 구분하지 않는 문자열의 데이터 형식 1.6 1.6 1.6 1.6 1.6 1.6 1.5
cube 다차원 큐브의 데이터 형식 1.5 1.5 1.5 1.5 1.4 1.4 1.4
dblink 데이터베이스 내에서 다른 PostgreSQL 데이터베이스에 연결 1.2 1.2 1.2 1.2 1.2 1.2 1.2
dict_int 정수에 대한 텍스트 검색 사전 템플릿 1.0 1.0 1.0 1.0 1.0 1.0 1.0
dict_xsyn 확장된 동의어 처리를 위한 텍스트 검색 사전 템플릿 1.0 1.0 1.0 1.0 1.0 1.0 1.0
earthdistance 지구 표면의 대권거리 계산 1.1 1.1 1.1 1.1 1.1 1.1 1.1
fuzzystrmatch 문자열 간의 유사성과 거리 결정 1.2 1.2 1.1 1.1 1.1 1.1 1.1
hstore 키/값 쌍 집합을 저장하기 위한 데이터 형식 1.8 1.8 1.8 1.8 1.7 1.6 1.5
hypopg PostgreSQL에 대한 가상 인덱스 1.4.0 1.4.0 1.4.0 1.4.0 1.4.0 1.4.0 1.4.0
intagg 정수 집계 및 열거자(사용되지 않음) 1.1 1.1 1.1 1.1 1.1 1.1 1.1
intarray 정수의 1차원 배열에 대한 함수, 연산자 및 인덱스 지원 1.5 1.5 1.5 1.5 1.3 1.2 1.2
isn 국제 제품 번호 지정 표준에 대한 데이터 형식 1.2 1.2 1.2 1.2 1.2 1.2 1.2
lo LOB(Large Object) 유지 관리 1.1 1.1 1.1 1.1 1.1 1.1 1.1
login_hook Login_hook - 로그인 시 login_hook.login()을 실행하는 후크 1.5 1.5 1.4 1.4 1.4 1.4 1.4
ltree 계층적 트리와 유사한 구조체에 대한 데이터 형식 1.3 1.2 1.2 1.2 1.2 1.1 1.1
oracle_fdw Oracle 데이터베이스에 대한 외신 데이터 래퍼 1.2 1.2 1.2 1.2 1.2 1.2 해당 없음
orafce Oracle RDBMS의 함수 및 패키지 하위 집합을 에뮬레이트하는 함수 및 연산자 4.9 4.4 3.24 3.18 3.18 3.18 3.7
pageinspect 낮은 수준에서 데이터베이스 페이지의 콘텐츠 검사 1.12 1.12 1.11 1.9 1.8 1.7 1.7
pgaudit 감사 기능 제공 16.0 ✔️ 16.0 ✔️ 1.7 ✔️ 1.6.2 ✔️ 1.5 ✔️ 1.4.3 ✔️ 1.3.2 ✔️
pg_buffercache 공유 버퍼 캐시 검사 1.5 1.4 1.3 1.3 1.3 1.3 1.3
pg_cron PostgreSQL용 작업 스케줄러 1.6 ✔️ 1.6 ✔️ 1.6 ✔️ 1.6 ✔️ 1.6 ✔️ 1.6 ✔️ 1.4-1 ✔️
pgcrypto 암호화 함수 1.3 1.3 1.3 1.3 1.3 1.3 1.3
pg_freespacemap FSM(사용 가능한 공간 맵) 검사 1.2 1.2 1.2 1.2 1.2 1.2 1.2
pg_hint_plan SQL 주석에서 소위 힌트를 사용하여 PostgreSQL 실행 계획 조정 가능. 1.7.0 ✔️ 1.6.0 ✔️ 1.5 ✔️ 1.4 ✔️ 1.3.7 ✔️ 1.3.7 ✔️ 1.3.7 ✔️
pglogical PostgreSQL 논리적 복제 2.4.5 ✔️ 2.4.4 ✔️ 2.4.2 ✔️ 2.4.1 ✔️ 2.4.1 ✔️ 2.4.1 ✔️ 2.4.1 ✔️
pg_partman 시간 또는 ID로 분할된 테이블을 관리하기 위한 확장 5.0.1 ✔️ 5.0.1 ✔️ 4.7.1 ✔️ 4.6.1 ✔️ 4.5.0 ✔️ 4.5.0 ✔️ 4.5.0 ✔️
pg_prewarm 관계 데이터 사전 준비 1.2 ✔️ 1.2 ✔️ 1.2 ✔️ 1.2 ✔️ 1.2 ✔️ 1.2 ✔️ 1.2 ✔️
pg_repack 잠금을 최소화하여 PostgreSQL 데이터베이스의 테이블 다시 구성 1.4.7 1.4.7 1.4.7 1.4.7 1.4.7 1.4.7 1.4.7
pgrouting PgRouting 확장 해당 없음 해당 없음 3.5.0 3.3.0 3.3.0 3.3.0 3.3.0
pgrowlocks 행 수준 잠금 정보 표시 1.2 1.2 1.2 1.2 1.2 1.2 1.2
pg_squeeze 관계에서 사용되지 않는 공간을 제거하는 도구입니다. 1.7 ✔️ 1.6 ✔️ 1.6 ✔️ 1.5 ✔️ 1.5 ✔️ 1.5 ✔️ 1.5 ✔️
pg_stat_statements 실행된 모든 SQL 문의 실행 통계 추적 1.11 ✔️ 1.10 ✔️ 1.10 ✔️ 1.9 ✔️ 1.8 ✔️ 1.7 ✔️ 1.6 ✔️
pgstattuple 튜플 수준 통계 표시 1.5 1.5 1.5 1.5 1.5 1.5 1.5
pg_trgm 트라이그램을 기준으로 하는 텍스트 유사성 측정 및 인덱스 검색 1.6 1.6 1.6 1.6 1.5 1.4 1.4
pg_visibility VM(표시 유형 맵) 및 페이지 수준 표시 유형 정보 검사 1.2 1.2 1.2 1.2 1.2 1.2 1.2
plpgsql PL/pgSQL 절차적 언어 1.0 1.0 1.0 1.0 1.0 1.0 1.0
plv8 PL/JavaScript(v8) 신뢰할 수 있는 절차적 언어 3.1.7 3.1.7 3.1.7 3.0.0 3.0.0 3.0.0 3.0.0
postgis PostGIS 기하학 및 지리 공간 형식 및 함수 3.5.0 3.3.3 3.3.1 3.2.3 3.2.3 3.2.3 3.2.3
postgis_raster PostGIS 래스터 형식 및 함수 3.5.0 3.3.3 3.3.1 3.2.3 3.2.3 3.2.3 3.2.3
postgis_sfcgal PostGIS SFCGAL 함수 3.5.0 3.3.3 3.3.1 3.2.3 3.2.3 3.2.3 3.2.3
postgis_tiger_geocoder PostGIS 타이거 지오코더(tiger geocoder) 및 리버스 지오코더(reverse geocoder) 3.5.0 3.3.3 3.3.1 3.2.3 3.2.3 3.2.3 3.2.3
postgis_topology PostGIS 토폴로지 공간 형식 및 함수 3.5.0 3.3.3 3.3.1 3.2.3 3.2.3 3.2.3 3.2.3
postgres_fdw 원격 PostgreSQL 서버에 대한 외부 데이터 래퍼 1.1 1.1 1.1 1.1 1.0 1.0 1.0
postgres_protobuf PostgreSQL에 대한 프로토콜 버퍼 0.2 0.2 0.2 0.2 0.2 0.2 해당 없음
semver 의미 체계 버전 데이터 형식 0.32.1 0.32.1 0.32.0 0.32.0 0.32.0 0.32.0 0.32.0
session_variable Session_variable - 세션 변수 및 상수의 등록 및 조작 3.3 3.3 3.3 3.3 3.3 3.3 3.3
sslinfo SSL 인증서 관련 정보 1.2 1.2 1.2 1.2 1.2 1.2 1.2
tablefunc 크로스탭을 포함한 전체 테이블을 조작하는 함수 1.0 1.0 1.0 1.0 1.0 1.0 1.0
tds_fdw TDS 데이터베이스 쿼리를 위한 외래 데이터 래퍼(Sybase 또는 Microsoft SQL Server) 2.0.3 2.0.3 2.0.3 2.0.3 2.0.3 2.0.3 2.0.3
timescaledb 시계열 데이터에 대한 확장성 있는 삽입 및 복잡한 쿼리를 사용합니다 해당 없음 2.13.0 ✔️ 2.10.0 ✔️ 2.10.0 ✔️ 2.10.0 ✔️ 2.10.0 ✔️ 1.7.4 ✔️
tsm_system_rows 행 수를 제한으로 허용하는 TABLESAMPLE 메서드 1.0 1.0 1.0 1.0 1.0 1.0 1.0
tsm_system_time 시간(밀리초)을 제한으로 허용하는 TABLESAMPLE 메서드 1.0 1.0 1.0 1.0 1.0 1.0 1.0
unaccent 악센트를 제거하는 텍스트 검색 사전 1.1 1.1 1.1 1.1 1.1 1.1 1.1
uuid-ossp UUID(범용 고유 식별자)를 생성합니다. 1.1 1.1 1.1 1.1 1.1 1.1 1.1
벡터 벡터 데이터 형식과 ivfflat 및 hnsw 액세스 방법 0.7.0 0.7.0 0.7.0 0.7.0 0.7.0 0.7.0 0.5.1

PostgreSQL 확장 업그레이드

데이터베이스 확장의 현재 위치 업그레이드는 간단한 명령을 통해 허용됩니다. 이 기능을 통해 고객은 타사 확장 프로그램을 최신 버전으로 자동 업데이트하여 수동 작업 없이도 최신의 안전한 시스템을 유지할 수 있습니다.

확장 업데이트

설치된 확장을 Azure에서 지원하는 사용 가능한 최신 버전으로 업데이트하려면 다음 SQL 명령을 사용합니다.

ALTER EXTENSION <extension_name> UPDATE;

이 명령은 사용자가 Azure에서 승인한 최신 버전으로 수동으로 업그레이드할 수 있도록 하여 데이터베이스 확장 관리를 간소화함으로써 호환성과 보안을 모두 향상합니다.

제한 사항

확장 업데이트는 간단하지만 다음과 같은 특정 제한 사항이 있습니다.

  • 특정 버전 선택: 이 명령은 확장의 중간 버전으로의 업데이트를 지원하지 않습니다. 항상 사용 가능한 최신 버전으로 업데이트됩니다.
  • 다운그레이드: 이전 버전으로 확장 다운그레이드를 지원하지 않습니다. 다운그레이드가 필요한 경우 지원이 필요할 수 있으며 지원 이용 가능 여부는 이전 버전의 가용성에 따라 달라집니다.

설치된 확장

데이터베이스에 현재 설치된 확장을 나열하려면 다음 SQL 명령을 사용합니다.

SELECT * FROM pg_extension;

사용 가능한 확장 및 해당 버전

현재 데이터베이스 설치에 사용할 수 있는 확장 버전을 확인하려면 pg_available_extensions 시스템 카탈로그 뷰를 쿼리합니다. 예를 들어, azure_ai확장에 사용할 수 있는 버전을 확인하려면 다음을 실행합니다.

SELECT * FROM pg_available_extensions WHERE name = 'azure_ai';

이러한 명령은 데이터베이스의 확장 구성에 필요한 인사이트를 제공하여 시스템을 효율적이고 안전하게 유지 관리하는 데 도움이 됩니다. 최신 확장 버전에 대한 간편한 업데이트를 사용하도록 설정함으로써 Azure Database for PostgreSQL은 데이터베이스 애플리케이션의 강력하고 안전하며 효율적인 관리를 계속 지원합니다.

Azure Database for PostgreSQL 유연한 서버와 관련된 고려 사항

다음은 Azure Database for PostgreSQL 유연한 서버 서비스에서 사용할 때 몇 가지 특정 고려 사항이 필요한 지원되는 확장 목록입니다. 목록은 알파벳순으로 정렬됩니다.

dblink를 사용하면 하나의 Azure Database for PostgreSQL 유연한 서버 인스턴스에서 다른 인스턴스로 연결하거나 동일한 서버의 다른 데이터베이스로 연결할 수 있습니다. Azure Database for PostgreSQL 유연한 서버는 PostgreSQL 서버에 대한 수신 및 발신 연결을 모두 지원합니다. 발신 서버는 수신 서버에 대한 아웃바운드 연결을 허용해야 합니다. 마찬가지로, 수신 서버는 발신 서버의 연결을 허용해야 합니다.

이 확장을 사용할 계획이라면 가상 네트워크 통합으로 서버를 배포하는 것이 좋습니다. 기본적으로 가상 네트워크 통합은 가상 네트워크의 서버 간에 연결을 허용합니다. 또한 가상 네트워크의 네트워크 보안 그룹을 사용하여 액세스를 사용자 지정하도록 선택할 수 있습니다.

pg_buffercache

pg_buffercacheshared_buffers의 콘텐츠를 연구하는 데 사용할 수 있습니다. 이 확장을 사용하면 특정 관계가 캐시되었는지 여부(shared_buffers에서)를 알 수 있습니다. 이 확장은 성능 문제(캐싱 관련 성능 문제)를 해결하는 데 도움이 될 수 있습니다.

이 확장은 PostgreSQL의 최소 설치와 통합되어 설치가 쉽습니다.

CREATE EXTENSION pg_buffercache;

pg_cron

pg_cron은 데이터베이스 내부에서 확장으로 실행되는 간단한 PostgreSQL용 cron 기반 작업 스케줄러입니다. pg_cron 확장을 사용하여 PostgreSQL 데이터베이스 내에서 예약된 유지 관리 작업을 실행할 수 있습니다. 예를 들어, 테이블을 주기적으로 정리하거나 오래된 데이터 작업을 제거할 수 있습니다.

pg_cron은 여러 작업을 병렬로 실행할 수 있지만 한 번에 최대 하나의 작업 인스턴스를 실행합니다. 첫 번째 실행이 완료되기 전에 두 번째 실행이 시작되어야 하는 경우 첫 번째 실행이 완료되는 즉시 두 번째 실행이 대기되고 시작됩니다. 이러한 방식으로 작업이 예약된 횟수만큼 정확하게 실행되고 동시에 실행되지 않도록 보장됩니다.

몇 가지 예:

토요일 오전 3시 30분(GMT)에 오래된 데이터를 삭제하려면

SELECT cron.schedule('30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$);

기본 데이터베이스 postgres에서 매일 오전 10시(GMT)에 vacuum을 실행하려면

SELECT cron.schedule('0 10 * * *', 'VACUUM');

pg_cron의 모든 작업 일정을 취소하려면

SELECT cron.unschedule(jobid) FROM cron.job;

현재 pg_cron에 예약된 모든 작업을 보려면

SELECT * FROM cron.job;

azure_pg_admin 역할 계정으로 데이터베이스 ‘testcron’에서 매일 오전 10시(GMT)에 vacuum을 실행하려면

SELECT cron.schedule_in_database('VACUUM','0 10 * * * ','VACUUM','testcron',null,TRUE);

참고 항목

pg_cron 확장은 postgres 데이터베이스 내의 모든 Azure Cosmos DB for PostgreSQL 유연한 서버 인스턴스에 대한 shared_preload_libraries의 미리 로드되어 보안을 손상시키지 않고 Azure Database for PostgreSQL 유연한 서버 DB 인스턴스 내의 다른 데이터베이스에서 실행되도록 작업을 예약할 수 있는 기능을 제공합니다. 그러나 보안상의 이유로 여전히 허용 목록pg_cron 확장을 사용하고 CREATE EXTENSION 명령을 사용하여 설치해야 합니다.

pg_cron 버전 1.4부터, cron.schedule_in_databasecron.alter_job 함수를 사용하여 특정 데이터베이스에서 작업을 예약하고 기존 일정을 각각 업데이트할 수 있습니다.

몇 가지 예는 다음과 같습니다.

토요일 오전 3시 30분(GMT)에 데이터베이스 DBName에서 오래된 데이터를 삭제하려면

SELECT cron.schedule_in_database('JobName', '30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$,'DBName');

참고 항목

cron_schedule_in_database 함수는 사용자 이름을 선택적 매개 변수로 허용합니다. 사용자 이름을 null이 아닌 값으로 설정하려면 PostgreSQL 슈퍼 사용자 권한이 필요하며 Azure Database for PostgreSQL 유연한 서버에서 지원되지 않습니다. 앞의 예는 선택적 사용자 이름 매개 변수를 생략하거나 null로 설정하여 이 함수를 실행하는 것을 보여 줍니다. 이는 azure_pg_admin 역할 권한이 있어야 하는 작업을 예약하는 사용자의 컨텍스트에서 작업을 실행합니다.

기존 일정의 데이터베이스 이름을 업데이트하거나 변경하려면

SELECT cron.alter_job(job_id:=MyJobID,database:='NewDBName');

pg_failover_slots

PG 장애 조치 슬롯 확장은 논리 복제 및 고가용성 지원 서버를 모두 사용하는 경우 Azure Database for PostgreSQL 유연한 서버를 향상시킵니다. 장애 조치 후에 논리 복제 슬롯을 유지하지 않는 표준 PostgreSQL 엔진 내의 문제를 효과적으로 해결합니다. 이러한 슬롯을 유지 관리하는 것은 주 서버 역할 변경 중에 복제 일시 중지 또는 데이터 불일치를 방지하여 운영 연속성 및 데이터 무결성을 보장하는 데 중요합니다.

확장은 복제 슬롯의 필요한 전송, 정리 및 동기화를 관리하여 장애 조치 프로세스를 간소화하므로 서버 역할 변경 중에 원활한 전환을 제공합니다. 이 확장은 PostgreSQL 버전 11에서 16까지 지원됩니다.

자세한 내용과 GitHub 페이지에서 PG 장애 조치 슬롯 확장을 사용하는 방법을 확인할 수 있습니다.

pg_failover_slots 사용

Azure Database for PostgreSQL 유연한 서버 인스턴스에 대해 PG 장애 조치 슬롯 확장을 사용하도록 설정하려면 서버의 공유 미리 로드 라이브러리에 확장을 포함하고 특정 서버 매개 변수를 조정하여 서버의 구성을 수정해야 합니다. 프로세스는 다음과 같습니다.

  1. shared_preload_libraries 매개 변수를 업데이트하여 서버의 공유 미리 로드 라이브러리에 pg_failover_slots를 추가합니다.
  2. 서버 매개 변수 hot_standby_feedbackon으로 변경합니다.

shared_preload_libraries 매개 변수를 변경하려면 서버를 다시 시작해야 합니다.

Azure Portal 사용:

  1. Azure Database for PostgreSQL 유연한 서버 인스턴스를 선택합니다.
  2. 리소스 메뉴의 설정 섹션에서 서버 매개 변수를 선택합니다.
  3. shared_preload_libraries 매개 변수를 검색하고 pg_failover_slots를 포함하도록 해당 값을 편집합니다.
  4. hot_standby_feedback 매개 변수를 검색하고 해당 값을 on으로 설정합니다.
  5. 저장을 선택하여 변경 내용을 보존합니다. 이제 저장하고 다시 시작할 수 있는 옵션이 제공됩니다. shared_preload_libraries를 수정하려면 서버를 다시 시작해야 하므로 변경 내용이 적용되도록 하려면 이 옵션을 선택합니다.

저장하고 다시 시작을 선택하면 서버가 자동으로 다시 부팅되고 방금 변경한 내용이 적용됩니다. 서버가 다시 온라인 상태가 되면 PG 장애 조치 슬롯 확장이 사용하도록 설정되고 주 Azure Database for PostgreSQL 유연한 서버 인스턴스에서 작동하여 장애 조치 중에 논리적 복제 슬롯을 처리할 준비가 됩니다.

pg_hint_plan

pg_hint_plan을 사용하면 다음과 같이 SQL 주석에서 소위 "힌트"를 사용하여 PostgreSQL 실행 계획을 조정할 수 있습니다.

/*+ SeqScan(a) */

pg_hint_plan은 대상 SQL 문과 함께 제공된 특수 형식의 주석에서 힌트 구를 읽습니다. 특수 형식은 문자 시퀀스 "/*+"로 시작하고 "*/"로 끝납니다. 힌트 구는 힌트 이름과 괄호로 묶이고 공백으로 구분된 다음 매개 변수로 구성됩니다. 가독성을 위해 새 줄은 각 힌트 구를 구분할 수 있습니다.

예시:

  /*+
      HashJoin(a b)
      SeqScan(a)
    */
    SELECT *
      FROM pgbench_branches b
      JOIN pgbench_accounts an ON b.bid = a.bid
     ORDER BY a.aid;

이전 예에서는 계획 도구가 테이블 a의 seq scan 결과를 테이블 b와 hash join으로 결합하도록 사용합니다.

pg_hint_plan을 설치하고 이를 나열하려면 PostgreSQL 확장 사용 방법에 표시된 대로 이를 서버의 공유 사전 로드 라이브러리에 포함해야 합니다. Postgres의 shared_preload_libraries 매개 변수를 변경하려면 서버를 다시 시작해야 합니다. 매개 변수는 Azure Portal 또는 Azure CLI를 사용해서 바꿀 수 있습니다.

Azure Portal 사용:

  1. Azure Database for PostgreSQL 유연한 서버 인스턴스를 선택합니다.
  2. 리소스 메뉴의 설정 섹션에서 서버 매개 변수를 선택합니다.
  3. shared_preload_libraries 매개 변수를 검색하고 pg_hint_plan를 포함하도록 해당 값을 편집합니다.
  4. 저장을 선택하여 변경 내용을 보존합니다. 이제 저장하고 다시 시작할 수 있는 옵션이 제공됩니다. shared_preload_libraries를 수정하려면 서버를 다시 시작해야 하므로 변경 내용이 적용되도록 하려면 이 옵션을 선택합니다. 이제 Azure Database for PostgreSQL 유연한 서버 데이터베이스에서 pg_hint_plan을 사용하도록 설정할 수 있습니다. 데이터베이스에 연결하여 다음 명령을 실행합니다.
CREATE EXTENSION pg_hint_plan;

pg_prewarm

pg_prewarm 확장은 관계형 데이터를 캐시에 로드합니다. 캐시를 사전 준비하면 다시 시작 후 쿼리를 처음 실행할 때 더 나은 응답 시간을 보입니다. 자동 사전 준비 기능은 현재 Azure Database for PostgreSQL 유연한 서버에서 사용할 수 없습니다.

pg_repack

사용자가 이 확장 기능을 처음 사용하려고 할 때 묻는 일반적인 질문은 다음과 같습니다. pg_repack은 확장인가요, 아니면 psql이나 pg_dump와 같은 클라이언트 쪽 실행 파일인가요?

이에 대한 답변은 실제로 둘 다라는 것입니다. pg_repack/lib에는 만들어진 스키마 및 SQL 아티팩트와 이러한 여러 함수의 코드를 구현하는 C 라이브러리를 포함하여 확장의 코드가 들어 있습니다. 반면, pg_repack/bin은 확장에서 만들어진 프로그래밍 아티팩트와 상호 작용하는 방법을 알고 있는 클라이언트 애플리케이션용 코드를 유지합니다. 이 클라이언트 애플리케이션은 사용자에게 더 쉽게 이해할 수 있는 몇 가지 명령줄 옵션을 제공함으로써 서버 쪽 확장에 의해 표시되는 다양한 인터페이스와의 상호 작용의 복잡성을 완화하는 것을 목표로 합니다. 가리키는 데이터베이스에 만들어진 확장이 없는 클라이언트 애플리케이션은 쓸모가 없습니다. 서버 쪽 확장은 그 자체로 완벽하게 작동하지만 사용자는 확장에 의해 구현된 기능에 대한 입력으로 사용되는 데이터를 검색하기 위해 쿼리를 실행하는 것으로 구성된 복잡한 상호 작용 패턴을 이해해야 합니다.

스키마 재포장에 대한 권한이 거부되었습니다.

현재로서는 이 확장으로 만들어진 repack 스키마에 권한을 부여하는 방식으로 인해 azure_pg_admin 컨텍스트에서 pg_repack 기능을 실행하는 것만 지원됩니다.

azure_pg_admin이 아닌 테이블 소유자가 pg_repack을 실행하려고 하면 결국 다음과 같은 오류가 발생한다는 것을 알 수 있습니다.

NOTICE: Setting up workers.conns
ERROR: pg_repack failed with error: ERROR:  permission denied for schema repack
LINE 1: select repack.version(), repack.version_sql()

해당 오류를 방지하려면 azure_pg_admin 컨텍스트에서 pg_repack을 실행해야 합니다.

pg_stat_statements

pg_stat_statements 확장을 사용하면 데이터베이스에서 실행된 모든 쿼리를 볼 수 있습니다. 이는 프로덕션 시스템에서 쿼리 워크로드 성능의 모양을 이해하는 데 유용합니다.

pg_stat_statements 확장은 SQL 문의 실행 통계를 추적하는 수단을 제공하기 위해 모든 Azure Database for PostgreSQL 유연한 서버 인스턴스의 shared_preload_libraries에 미리 로드되어 있습니다. 그러나 보안상 이유로 pg_stat_statements 확장허용 목록에 추가하고 CREATE EXTENSION 명령을 사용하여 설치해야 합니다. 확장을 통해 어떤 명령문을 계산할지 제어하는 pg_stat_statements.track 설정의 기본값은 top이며 이것은 클라이언트가 직접 실행하는 모든 명령문이 추적된다는 의미입니다. 다른 두 가지 추적 수준은 noneall입니다. 이 설정은 서버 매개 변수로 구성할 수 있습니다.

pg_stat_statements에서 제공되는 쿼리 실행 정보와 각 SQL 문을 기록할 때 서버 성능에 미치는 영향 사이에는 상충 관계가 있습니다. pg_stat_statements 확장을 적극적으로 사용하지 않는 경우 pg_stat_statements.tracknone으로 설정하는 것이 좋습니다. 일부 타사 모니터링 서비스는 쿼리 성능 인사이트를 제공하기 위해 pg_stat_statements에 의존할 수 있으므로 이것이 사용자에게 해당되는지 확인합니다.

postgres_fdw

postgres_fdw를 사용하면 한 Azure Database for PostgreSQL 유연한 서버 인스턴스에서 다른 서버 인스턴스로 또는 동일한 서버의 다른 데이터베이스로 연결할 수 있습니다. Azure Database for PostgreSQL 유연한 서버는 PostgreSQL 서버에 대한 수신 및 발신 연결을 모두 지원합니다. 발신 서버는 수신 서버에 대한 아웃바운드 연결을 허용해야 합니다. 마찬가지로, 수신 서버는 발신 서버의 연결을 허용해야 합니다.

이 확장을 사용할 계획이라면 가상 네트워크 통합으로 서버를 배포하는 것이 좋습니다. 기본적으로 가상 네트워크 통합은 가상 네트워크의 서버 간에 연결을 허용합니다. 또한 가상 네트워크의 네트워크 보안 그룹을 사용하여 액세스를 사용자 지정하도록 선택할 수 있습니다.

pgstattuple

'pgstattuple' 확장을 사용하여 Postgres 11~13 버전의 스키마에 pg_toast 보관된 개체에서 튜플 통계를 가져오려고 하면 "스키마 pg_toast 대한 사용 권한 거부" 오류가 표시됩니다.

스키마 pg_toast 대한 사용 권한이 거부됨

Azure Database for Flexible Server에서 PostgreSQL 버전 11~13을 사용하는 고객은 스키마 내 pg_toastpgstattuple 개체에서 확장을 사용할 수 없습니다.

PostgreSQL 16 및 17 pg_read_all_data 에서는 역할이 자동으로 부여되어 azure_pg_admin올바르게 작동할 수 있습니다 pgstattuple . PostgreSQL 14 및 15에서 고객은 동일한 결과를 얻기 위해 역할을 수동으로 부여 pg_read_all_dataazure_pg_admin 수 있습니다. 그러나 PostgreSQL 11~13에서는 pg_read_all_data 역할이 존재하지 않습니다.

고객은 필요한 권한을 직접 부여할 수 없습니다. 스키마 아래 pg_toast 의 개체에 액세스하기 위해 실행할 pgstattuple 수 있어야 하는 경우 Azure 지원 요청을 계속 만드세요.

TimescaleDB

TimescaleDB는 PostgreSQL용 확장으로 패키지된 시계열 데이터베이스입니다. TimescaleDB는 시계열 워크로드에 대한 시간 기반 분석 함수, 최적화 및 스케일링 Postgres를 제공합니다. Timescale, Inc.의 등록 상표인 TimescaleDB에 대한 자세한 정보를 알아봅니다. Azure Database for PostgreSQL 유연한 서버는 TimescaleDB Apache-2 버전을 제공합니다.

TimescaleDB 설치

TimescaleDB를 설치하려면 나열을 허용하는 것 외에도 에 표시된 대로 서버의 공유 사전 로드 라이브러리에 포함해야 합니다. Postgres의 shared_preload_libraries 매개 변수를 변경하려면 서버를 다시 시작해야 합니다. 매개 변수는 Azure Portal 또는 Azure CLI를 사용해서 바꿀 수 있습니다.

Azure Portal 사용:

  1. Azure Database for PostgreSQL 유연한 서버 인스턴스를 선택합니다.
  2. 리소스 메뉴의 설정 섹션에서 서버 매개 변수를 선택합니다.
  3. shared_preload_libraries 매개 변수를 검색하고 TimescaleDB를 포함하도록 해당 값을 편집합니다.
  4. 저장을 선택하여 변경 내용을 보존합니다. 이제 저장하고 다시 시작할 수 있는 옵션이 제공됩니다. shared_preload_libraries를 수정하려면 서버를 다시 시작해야 하므로 변경 내용이 적용되도록 하려면 이 옵션을 선택합니다. 이제 Azure Database for PostgreSQL 유연한 서버 데이터베이스에서 TimescaleDB를 사용하도록 설정할 수 있습니다. 데이터베이스에 연결하여 다음 명령을 실행합니다.
CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;

오류가 표시되면 shared_preload_libraries를 저장한 후 서버를 다시 시작했는지 확인합니다.

이제 TimescaleDB 하이퍼테이블을 처음부터 새로 만들거나 PostgreSQL에서 기존 시계열 데이터를 마이그레이션할 수 있습니다.

pg_dump 및 pg_restore를 사용하여 Timescale 데이터베이스 복원

pg_dump 및 pg_restore를 사용하여 Timescale 데이터베이스를 복원하려면 대상 데이터베이스에서 timescaledb_pre_restore()timescaledb_post restore()라는 두 개의 도우미 프로시저를 실행해야 합니다.

먼저 대상 데이터베이스를 준비합니다.

--create the new database where you want to perform the restore
CREATE DATABASE tutorial;
\c tutorial --connect to the database
CREATE EXTENSION timescaledb;

SELECT timescaledb_pre_restore();

이제 원본 데이터베이스에서 pg_dump를 실행하고 그 다음 pg_restore를 실행합니다. 복원 후 복원된 데이터베이스에서 다음 명령을 반드시 실행하세요.

SELECT timescaledb_post_restore();

Timescale 지원 데이터베이스의 복원 방법에 대한 자세한 내용은 Timescale 설명서를 참조하세요.

timescaledb-backup을 사용하여 Timescale 데이터베이스 복원

위에 나열된 SELECT timescaledb_post_restore() 프로시저를 실행하는 동안 timescaledb.restoring 플래그를 업데이트하는 동안 권한이 거부될 수 있습니다. 이는 Cloud PaaS 데이터베이스 서비스에서 제한된 ALTER DATABASE 권한 때문입니다. 이 경우 timescaledb-backup 도구를 사용하여 Timescale 데이터베이스를 백업 및 복원하는 대체 방법을 수행할 수 있습니다. Timescaledb-backup은 TimescaleDB 데이터베이스를 더 간단하고 오류가 발생하기 쉬우며 성능이 향상되도록 덤프 및 복원하기 위한 프로그램입니다.
이렇게 하려면 다음을 수행해야 합니다.

  1. 여기에 설명된 대로 도구 설치
    1. 대상 Azure Database for PostgreSQL 유연한 서버 인스턴스 및 데이터베이스 만들기
    2. 위와 같이 Timescale 확장 사용
    3. ts-restore에서 사용할 사용자에게 azure_pg_admin 역할 부여
    4. ts-restore를 실행하여 데이터베이스 복원

이러한 유틸리티에 대한 자세한 내용은 여기에서 확인할 수 있습니다.

확장 및 주 버전 업그레이드

Azure Database for PostgreSQL 유연한 서버에는 이제 클릭 한 번으로 Azure Database for PostgreSQL 유연한 서버 인스턴스의 전체 업그레이드를 수행하는 전체 주 버전 업그레이드 기능이 도입되었습니다. 전체 주 버전 업그레이드는 Azure Database for PostgreSQL 유연한 서버 업그레이드 프로세스를 간소화하여 서버에 액세스하는 사용자 및 애플리케이션의 중단을 최소화합니다. 현재 위치 주 버전 업그레이드는 특정 확장을 지원하지 않으며 특정 확장을 업그레이드하는 데 몇 가지 제한 사항이 있습니다. 확장 anon, Apache AGE, dblink, orafce, pgaudit, postgres_fdwTimescaledb는 현재 위치 주 버전 업데이트 기능을 사용할 때 모든 Azure Database for PostgreSQL 유연한 서버 버전에 대해 지원되지 않습니다.