ALTER POSTGRES INSTANCE
ALTER POSTGRES INSTANCE
기존 Snowflake Postgres 인스턴스의 속성을 수정하는 명령이에요.
출처: 문서
본문
관련 명령: CREATE POSTGRES INSTANCE, DESCRIBE POSTGRES INSTANCE, DROP POSTGRES INSTANCE, SHOW POSTGRES INSTANCES
구문 (Syntax)
ALTER POSTGRES INSTANCE [ IF EXISTS ] <name>
RENAME TO <new_name>
ALTER POSTGRES INSTANCE [ IF EXISTS ] <name> SET
[ NETWORK_POLICY = '<network_policy>' ]
[ AUTHENTICATION_AUTHORITY = { POSTGRES | POSTGRES_OR_SNOWFLAKE } ]
[ COMMENT = '<string_literal>' ]
[ HIGH_AVAILABILITY = { TRUE | FALSE } ]
[ COMPUTE_FAMILY = '<compute_family>' ]
[ STORAGE_SIZE_GB = <storage_gb> ]
[ STORAGE_INTEGRATION = '<storage_integration_name>' ]
[ POSTGRES_VERSION = { 16 | 17 | 18 } ]
[ MAINTENANCE_WINDOW_START = <hour_of_day> ]
[ POSTGRES_SETTINGS = '<json_string>' ]
[ APPLY { IMMEDIATELY | ON '<timestamp>' } ]
ALTER POSTGRES INSTANCE [ IF EXISTS ] <name>
UNSET { COMMENT | POSTGRES_SETTINGS | NETWORK_POLICY
| MAINTENANCE_WINDOW_START | STORAGE_INTEGRATION } [ , ... ]
ALTER POSTGRES INSTANCE [ IF EXISTS ] <name> SUSPEND
ALTER POSTGRES INSTANCE [ IF EXISTS ] <name> RESUME
ALTER POSTGRES INSTANCE [ IF EXISTS ] <name> RESET ACCESS
FOR { 'snowflake_admin' | 'application' }
ALTER POSTGRES INSTANCE [ IF EXISTS ] <name> SET TAG <tag_name> =
'<tag_value>' [ , <tag_name> = '<tag_value>' ... ]
ALTER POSTGRES INSTANCE [ IF EXISTS ] <name> UNSET TAG <tag_name>
[ , <tag_name> ... ]
매개변수 (Parameters)
name — 수정할 Postgres 인스턴스의 식별자를 지정해요.
식별자에 공백이나 특수 문자가 포함되어 있으면 전체 문자열을 큰따옴표로 묶어야 해요. 큰따옴표로 묶은 식별자는 대소문자를 구분해요. 자세한 내용은 식별자 요구사항을 참고하세요.
RENAME TO new_name — Postgres 인스턴스의 이름을 지정한 새 이름으로 변경해요. 새 식별자는 계정에서 고유해야 해요. 식별자에 대한 자세한 내용은 식별자 요구사항을 참고하세요.
RESET ACCESS FOR { 'snowflake_admin' | 'application' } — snowflake_admin 또는 application 역할의 자격 증명을 재생성해요. 다음 열을 가진 한 행을 반환해요:
password
자세한 내용은 Snowflake Postgres 역할을 참고하세요.
SET ... — Postgres 인스턴스에 대해 하나 이상의 지정된 속성을 설정해요:
NETWORK_POLICY = 'network_policy' — 인스턴스에 사용할 네트워크 정책을 지정해요. 정책 변경 사항은 최대 2분까지 걸릴 수 있어요.
이 매개변수를 지정하려면 네트워크 정책 객체에 대한 USAGE 권한이 부여되어 있어야 해요.
AUTHENTICATION_AUTHORITY = { POSTGRES | POSTGRES_OR_SNOWFLAKE } — 인스턴스의 인증 방법을 변경해요. POSTGRES는 Postgres 사용자 암호만 사용할 수 있음을 나타내요. POSTGRES_OR_SNOWFLAKE는 단기 사용 액세스 토큰 암호도 허용해요. 자세한 내용은 Snowflake Postgres용 Snowflake 토큰 인증을 참고하세요.
COMMENT = 'string_literal' — Postgres 인스턴스의 주석을 추가하거나 기존 주석을 덮어써요.
HIGH_AVAILABILITY = { TRUE | FALSE } — 인스턴스의 고가용성(high availability)을 활성화/비활성화해요. 비동기 작업으로 실행돼요. DESCRIBE POSTGRES INSTANCE 명령을 실행하고 operations 필드를 모니터링해 진행 상황을 추적해요.
고가용성 변경은 인스턴스가 READY 상태이고 다른 작업이 실행 중이 아닐 때만 시작할 수 있어요.
참고: 버스트 가능(burstable) 인스턴스 크기(BURST_S, BURST_M)는 고가용성을 지원하지 않아요. HA를 활성화하려면 먼저 STANDARD 또는 HIGHMEM 컴퓨트 패밀리로 변경해야 해요.
COMPUTE_FAMILY = 'compute_family' — Postgres 인스턴스의 새 인스턴스 크기를 지정해요.
STORAGE_SIZE_GB = storage_gb — GB 단위의 새 스토리지 크기를 지정해요. 증가와 감소 모두 지원돼요.
참고: 스토리지 크기를 줄일 때 현재 디스크 사용량에 너무 가깝게 설정할 수 없어요. 새 크기는 현재 사용 중인 디스크 공간의 최소 1.4배여야 해요. 그래야 자동 스토리지 증가를 트리거하지 않고도 데이터를 더 추가할 공간이 생겨요.
STORAGE_INTEGRATION = 'storage_integration_name' — POSTGRES_EXTERNAL_STORAGE 타입의 스토리지 통합을 Postgres 인스턴스에 연결해 pg_lake 확장이 외부 객체 스토리지의 데이터에 접근할 수 있게 해요. 전체 설정 절차는 pg_lake를 참고하세요.
Preview Feature — 공개됨. 모든 계정에서 사용할 수 있어요.
POSTGRES_VERSION = { 16 | 17 | 18 } — 업그레이드할 Postgres 주요 버전을 지정해요. 더 새로운 버전으로만 업그레이드할 수 있어요. 다운그레이드는 지원되지 않아요.
MAINTENANCE_WINDOW_START = hour_of_day — 유지 관리 창(maintenance window)이 시작될 수 있는 시간(0-23, UTC)을 지정해요. 유지 관리 창은 지정된 시간부터 3시간 동안이에요.
POSTGRES_SETTINGS = 'json_string' — JSON 형식으로 인스턴스의 Postgres 서버 설정 변경 사항을 지정해요:
'{"component:name" = "value", ...}'
일부 설정은 적용되려면 인스턴스 재시작이 필요해요. APPLY IMMEDIATELY를 지정하지 않으면 이러한 변경 사항은 적용되지 않아요.
APPLY IMMEDIATELY — 정의된 유지 관리 창을 무시하고 지정된 작업을 준비되는 대로 바로 적용해요. COMPUTE_FAMILY, STORAGE_SIZE_GB, POSTGRES_VERSION, POSTGRES_SETTINGS에 적용돼요.
APPLY ON 'timestamp' — 정의된 유지 관리 창을 무시하고 지정된 타임스탬프에 작업을 적용해요. 타임스탬프는 최대 72시간 미래까지만 가능해요.
지원되는 타임스탬프 형식:
yyyy-MM-ddyyyy-MM-dd HH:mmyyyy-MM-dd HH:mm:ssyyyy-MM-dd HH:mm zzz
UNSET ... — Postgres 인스턴스의 하나 이상의 지정된 속성을 해제해 기본값으로 되돌려요:
COMMENTPOSTGRES_SETTINGSNETWORK_POLICYMAINTENANCE_WINDOW_START— 해제하면 진행 중인 모든 작업이 완료되는 대로 적용돼요.STORAGE_INTEGRATION— 인스턴스에서 스토리지 통합을 제거해 pg_lake의 외부 스토리지 접근을 비활성화해요.
하나의 ALTER 문으로 여러 속성이나 매개변수를 해제하려면 각 속성이나 매개변수를 콤마로 구분해요. 속성이나 매개변수를 해제할 때는 이름만 지정해요(위 구문이 값을 지정하라고 나타내지 않는 한). 값을 지정하면 오류가 반환돼요.
SUSPEND — Postgres 인스턴스를 일시 중지해요. 디스크 이미지는 스토리지에 유지하면서 가상 머신을 비활성화해요. 일반 청구는 중단되지만 스토리지 비용은 계속 발생해요. 기존 백업은 유지돼요.
RESUME — 일시 중지된 Postgres 인스턴스를 재개해요. 재시작이 보류 중인 작업이 있었다면 인스턴스 재개 시 적용돼요.
TAG tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] — 태그 이름과 태그 문자열 값을 지정해요.
태그 값은 항상 문자열이며, 최대 문자 수는 256이에요. 문에서 태그를 지정하는 방법은 태그 할당량을 참고하세요.
접근 제어 요구사항 (Access control requirements)
이 작업을 실행하는 데 사용되는 역할은 최소한 다음 권한을 보유해야 해요:
| 권한 | 객체 | 설명 |
|---|---|---|
| OWNERSHIP 또는 MODIFY | Postgres instance | 인스턴스 속성 수정에 필요해요. |
| OWNERSHIP 또는 OPERATE | Postgres instance | SUSPEND와 RESUME 작업에 필요해요. |
| USAGE | Network policy | NETWORK_POLICY를 지정할 때만 필요해요. |
| USAGE | Storage integration | STORAGE_INTEGRATION을 지정할 때만 필요해요. |
지정한 권한 집합을 가진 사용자 정의 역할을 만드는 방법은 사용자 정의 역할 만들기를 참고하세요.
보호 객체에서 SQL 작업을 수행할 때 역할과 권한 부여에 대한 일반 정보는 접근 제어 개요를 참고하세요.
사용 메모 (Usage notes)
COMPUTE_FAMILY,STORAGE_SIZE_GB,POSTGRES_VERSION변경은 총칭해서 "업그레이드(upgrade)" 작업이라 부르며 함께 수행할 수 있어요. DESCRIBE POSTGRES INSTANCE 명령을 실행하고operations필드를 모니터링해 진행 상황을 추적해요.- 업그레이드 작업은 인스턴스가 READY 상태이고 다른 작업이 실행 중이 아닐 때만 시작할 수 있어요.
- 인스턴스에 정의된 유지 관리 창이 있으면
APPLY IMMEDIATELY를 지정하지 않는 한 유지 관리 창 기간이 시작될 때까지 변경 사항이 적용되지 않아요. 유지 관리 창은 변경 사항이 언제 적용되는지를 제어하며, 인스턴스가 실행 중인지 여부는 제어하지 않아요. 유지 관리 작업에 대한 자세한 내용은 Snowflake Postgres 인스턴스 관리를 참고하세요. - 인스턴스 관리 작업을 수행하려면 잠깐의 서비스 중단이 필요해요. 애플리케이션이 데이터베이스에 자동으로 다시 연결될 수 있도록 해두세요.
- SUSPEND와 RESUME은 인스턴스 청구를 시작/중지하는 즉시 작업이에요. 유지 관리 창(구성 변경, 예: 업그레이드나 HA 활성화가 적용되는 시점을 예약)과는 구별돼요.
- 인스턴스의 연결 문자열은 인스턴스 관리 작업 전반에 걸쳐 동일하게 유지돼요(자격 증명을 명시적으로 재생성하지 않는 한).
- 인스턴스의 현재 네트워크 정책은 인스턴스 속성으로 간주되므로, 이를 변경하려면 인스턴스에 대한 OWNERSHIP 또는 MODIFY와 새 네트워크 정책에 대한 USAGE가 모두 필요해요.
- 메타데이터 관련: Snowflake 서비스를 사용할 때 메타데이터로 개인 데이터(User 객체 외), 민감한 데이터, 수출 통제 데이터 또는 기타 규제 대상 데이터를 입력하지 않도록 주의해야 해요. 자세한 내용은 Snowflake의 메타데이터 필드를 참고하세요.
예시 (Examples)
Postgres 인스턴스의 컴퓨트 패밀리와 스토리지 크기를 변경해요.
ALTER POSTGRES INSTANCE my_postgres
SET COMPUTE_FAMILY = 'STANDARD_M'
STORAGE_SIZE_GB = 100;
DESCRIBE를 사용해 작업 진행 상황을 모니터링해요.
DESCRIBE POSTGRES INSTANCE my_postgres
->> SELECT "property", "value"
FROM $1
WHERE "property" IN
('name', 'state', 'operations', 'compute_family',
'storage_size_gb');
-- Repeat until state shows 'READY'
인스턴스에 고가용성을 활성화해요.
-- Check current HA status
DESCRIBE POSTGRES INSTANCE my_postgres
->> SELECT "property", "value"
FROM $1
WHERE "property" IN ('name', 'high_availability',
'state');
-- Enable HA (asynchronous operation)
ALTER POSTGRES INSTANCE my_postgres
SET HIGH_AVAILABILITY = TRUE;
-- Monitor until operation completes
DESCRIBE POSTGRES INSTANCE my_postgres
->> SELECT "property", "value"
FROM $1
WHERE "property" IN ('name', 'high_availability',
'state');
Postgres 18로 업그레이드해요.
-- Check current Postgres version using flow operator
SHOW POSTGRES INSTANCES
->> SELECT "name", "postgres_version", "state"
FROM $1
WHERE "name" = 'my_postgres';
-- Upgrade to version 18
ALTER POSTGRES INSTANCE my_postgres
SET POSTGRES_VERSION = 18;
유지 관리 창을 무시하고 변경 사항을 즉시 적용해요.
ALTER POSTGRES INSTANCE my_postgres
SET COMPUTE_FAMILY = 'STANDARD_L'
APPLY IMMEDIATELY;
Postgres 인스턴스를 일시 중지해요.
-- Check state before suspending
DESCRIBE POSTGRES INSTANCE my_postgres
->> SELECT "property", "value"
FROM $1
WHERE "property" IN ('name', 'state');
-- Suspend the instance
ALTER POSTGRES INSTANCE my_postgres SUSPEND;
-- Verify suspended state
DESCRIBE POSTGRES INSTANCE my_postgres
->> SELECT "property", "value"
FROM $1
WHERE "property" IN ('name', 'state');
일시 중지된 인스턴스를 재개해요.
ALTER POSTGRES INSTANCE my_postgres RESUME;
Postgres 인스턴스의 이름을 바꿔요.
ALTER POSTGRES INSTANCE my_postgres
RENAME TO prod_postgres;
참고: 인스턴스 이름을 바꾸면 Snowflake의 식별자가 바뀌지만 연결 호스트 이름은 변하지 않아요. 호스트 이름은 동일하게 유지되므로 기존 연결과 애플리케이션은 수정 없이 계속 동작해요.
더 알아보기 (Learn more)
- CREATE POSTGRES INSTANCE — Postgres 인스턴스 만들기
- DESCRIBE POSTGRES INSTANCE — Postgres 인스턴스 설명
- SHOW POSTGRES INSTANCES — Postgres 인스턴스 나열
- DROP POSTGRES INSTANCE — Postgres 인스턴스 삭제