Azure Database for PostgreSQL - 유연한 서버의 PostgreSQL 확장
적용 대상: Azure Database for PostgreSQL - 유연한 서버
Azure Database for PostgreSQL 유연한 서버는 확장을 사용하여 데이터베이스의 기능을 확장하는 기능을 제공합니다. 확장은 명령을 사용하여 데이터베이스에서 로드하거나 제거할 수 있는 단일 패키지에서 여러 관련 SQL 개체를 번들로 묶습니다. 데이터베이스에 로드된 후에 확장은 기본 제공 기능으로 작동할 수 있습니다.
PostgreSQL 확장을 사용하는 방법
Azure Database for PostgreSQL 유연한 서버에 확장을 설치하려면 먼저 이러한 확장을 사용하도록 허용 목록에 추가해야 합니다.
Azure Portal 사용:
- 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 사용:
- Azure Database for PostgreSQL 유연한 서버 인스턴스를 선택합니다.
- 리소스 메뉴의 설정 섹션에서 서버 매개 변수를 선택합니다.
shared_preload_libraries
매개 변수를 검색합니다.- 추가하려는 라이브러리를 선택합니다.
:::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>
확장 만들기
확장이 허용 목록에 추가되고 로드된 후에는 해당 확장을 사용하려는 각 데이터베이스에 설치해야 합니다.
- 확장을 만들려면 사용자가 역할의
azure_pg_admin
멤버여야 합니다. 역할의 멤버는azure_pg_admin
다른 사용자에게 확장을 만들 수 있는 권한을 부여할 수 있습니다. - 특정 확장을 설치하려면 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
dblink를 사용하면 하나의 Azure Database for PostgreSQL 유연한 서버 인스턴스에서 다른 인스턴스로 연결하거나 동일한 서버의 다른 데이터베이스로 연결할 수 있습니다. Azure Database for PostgreSQL 유연한 서버는 PostgreSQL 서버에 대한 수신 및 발신 연결을 모두 지원합니다. 발신 서버는 수신 서버에 대한 아웃바운드 연결을 허용해야 합니다. 마찬가지로, 수신 서버는 발신 서버의 연결을 허용해야 합니다.
이 확장을 사용할 계획이라면 가상 네트워크 통합으로 서버를 배포하는 것이 좋습니다. 기본적으로 가상 네트워크 통합은 가상 네트워크의 서버 간에 연결을 허용합니다. 또한 가상 네트워크의 네트워크 보안 그룹을 사용하여 액세스를 사용자 지정하도록 선택할 수 있습니다.
pg_buffercache
pg_buffercache
는 shared_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_database
및 cron.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 장애 조치 슬롯 확장을 사용하도록 설정하려면 서버의 공유 미리 로드 라이브러리에 확장을 포함하고 특정 서버 매개 변수를 조정하여 서버의 구성을 수정해야 합니다. 프로세스는 다음과 같습니다.
shared_preload_libraries
매개 변수를 업데이트하여 서버의 공유 미리 로드 라이브러리에pg_failover_slots
를 추가합니다.- 서버 매개 변수
hot_standby_feedback
을on
으로 변경합니다.
shared_preload_libraries
매개 변수를 변경하려면 서버를 다시 시작해야 합니다.
Azure Portal 사용:
- Azure Database for PostgreSQL 유연한 서버 인스턴스를 선택합니다.
- 리소스 메뉴의 설정 섹션에서 서버 매개 변수를 선택합니다.
shared_preload_libraries
매개 변수를 검색하고pg_failover_slots
를 포함하도록 해당 값을 편집합니다.hot_standby_feedback
매개 변수를 검색하고 해당 값을on
으로 설정합니다.- 저장을 선택하여 변경 내용을 보존합니다. 이제 저장하고 다시 시작할 수 있는 옵션이 제공됩니다.
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 사용:
- Azure Database for PostgreSQL 유연한 서버 인스턴스를 선택합니다.
- 리소스 메뉴의 설정 섹션에서 서버 매개 변수를 선택합니다.
shared_preload_libraries
매개 변수를 검색하고pg_hint_plan
를 포함하도록 해당 값을 편집합니다.- 저장을 선택하여 변경 내용을 보존합니다. 이제 저장하고 다시 시작할 수 있는 옵션이 제공됩니다.
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
이며 이것은 클라이언트가 직접 실행하는 모든 명령문이 추적된다는 의미입니다. 다른 두 가지 추적 수준은 none
과 all
입니다. 이 설정은 서버 매개 변수로 구성할 수 있습니다.
pg_stat_statements
에서 제공되는 쿼리 실행 정보와 각 SQL 문을 기록할 때 서버 성능에 미치는 영향 사이에는 상충 관계가 있습니다. pg_stat_statements
확장을 적극적으로 사용하지 않는 경우 pg_stat_statements.track
을 none
으로 설정하는 것이 좋습니다. 일부 타사 모니터링 서비스는 쿼리 성능 인사이트를 제공하기 위해 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_toast
의 pgstattuple
개체에서 확장을 사용할 수 없습니다.
PostgreSQL 16 및 17 pg_read_all_data
에서는 역할이 자동으로 부여되어 azure_pg_admin
올바르게 작동할 수 있습니다 pgstattuple
. PostgreSQL 14 및 15에서 고객은 동일한 결과를 얻기 위해 역할을 수동으로 부여 pg_read_all_data
할 azure_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 사용:
- Azure Database for PostgreSQL 유연한 서버 인스턴스를 선택합니다.
- 리소스 메뉴의 설정 섹션에서 서버 매개 변수를 선택합니다.
shared_preload_libraries
매개 변수를 검색하고TimescaleDB
를 포함하도록 해당 값을 편집합니다.- 저장을 선택하여 변경 내용을 보존합니다. 이제 저장하고 다시 시작할 수 있는 옵션이 제공됩니다.
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 데이터베이스를 더 간단하고 오류가 발생하기 쉬우며 성능이 향상되도록 덤프 및 복원하기 위한 프로그램입니다.
이렇게 하려면 다음을 수행해야 합니다.
- 여기에 설명된 대로 도구 설치
- 대상 Azure Database for PostgreSQL 유연한 서버 인스턴스 및 데이터베이스 만들기
- 위와 같이 Timescale 확장 사용
- ts-restore에서 사용할 사용자에게
azure_pg_admin
역할 부여 - ts-restore를 실행하여 데이터베이스 복원
이러한 유틸리티에 대한 자세한 내용은 여기에서 확인할 수 있습니다.
확장 및 주 버전 업그레이드
Azure Database for PostgreSQL 유연한 서버에는 이제 클릭 한 번으로 Azure Database for PostgreSQL 유연한 서버 인스턴스의 전체 업그레이드를 수행하는 전체 주 버전 업그레이드 기능이 도입되었습니다. 전체 주 버전 업그레이드는 Azure Database for PostgreSQL 유연한 서버 업그레이드 프로세스를 간소화하여 서버에 액세스하는 사용자 및 애플리케이션의 중단을 최소화합니다. 현재 위치 주 버전 업그레이드는 특정 확장을 지원하지 않으며 특정 확장을 업그레이드하는 데 몇 가지 제한 사항이 있습니다. 확장 anon, Apache AGE, dblink, orafce, pgaudit, postgres_fdw 및 Timescaledb는 현재 위치 주 버전 업데이트 기능을 사용할 때 모든 Azure Database for PostgreSQL 유연한 서버 버전에 대해 지원되지 않습니다.