CREATE POSTGRES INSTANCE

새 :doc:`Snowflake Postgres 인스턴스 </user-guide/snowflake-postgres/about>`를 생성하거나 기존 인스턴스의 포크를 생성합니다.

포크는 :doc:`특정 시점 복구(PITR) </user-guide/snowflake-postgres/postgres-point-in-time-recovery>`를 사용하여 특정 시점에 인스턴스의 **독립적인 전체 복사본**을 생성합니다. 이는 프로덕션 데이터에서 개발 환경을 복구, 테스트 또는 생성하는 데 유용합니다.

참고 항목:

ALTER POSTGRES INSTANCE , DESCRIBE POSTGRES INSTANCE, DROP POSTGRES INSTANCE , SHOW POSTGRES INSTANCES

구문

CREATE POSTGRES INSTANCE <name>
  COMPUTE_FAMILY = '<compute_family>'
  STORAGE_SIZE_GB = <storage_gb>
  AUTHENTICATION_AUTHORITY = { POSTGRES | POSTGRES_OR_SNOWFLAKE }
  [ POSTGRES_VERSION = { 16 | 17 | 18 } ]
  [ NETWORK_POLICY = '<network_policy>' ]
  [ HIGH_AVAILABILITY = { TRUE | FALSE } ]
  [ STORAGE_INTEGRATION = '<storage_integration_name>' ]
  [ POSTGRES_SETTINGS = '<json_string>' ]
  [ COMMENT = '<string_literal>' ]
  [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , ... ] ) ]
Copy

다음 구문은 특정 시점에 기존 인스턴스의 포크를 생성합니다. FORK 절은 :doc:`Time Travel </user-guide/data-time-travel>`과 동일한 AT | BEFORE 구문으로 :doc:`특정 시점 복구 </user-guide/snowflake-postgres/postgres-point-in-time-recovery>`를 사용하지만, Postgres 인스턴스의 물리적인 전체 복사본을 생성합니다.

CREATE POSTGRES INSTANCE <name>
  FORK <source_instance>
  [ { AT | BEFORE } ( { TIMESTAMP => <timestamp> | OFFSET => <time_difference> } ) ]
  [ COMPUTE_FAMILY = '<compute_family>' ]
  [ STORAGE_SIZE_GB = <storage_gb> ]
  [ HIGH_AVAILABILITY = { TRUE | FALSE } ]
  [ POSTGRES_SETTINGS = '<json_string>' ]
  [ COMMENT = '<string_literal>' ]
  [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , ... ] ) ]
Copy

필수 매개 변수

name

Postgres 인스턴스의 식별자(이름)를 지정하며, 이는 계정에 대해 고유해야 합니다.

또한, 식별자는 알파벳 문자로 시작해야 하며 전체 식별자 문자열을 큰따옴표(예: "My object")로 묶지 않는 한 공백이나 특수 문자를 포함할 수 없습니다. 큰따옴표로 묶인 식별자도 대/소문자를 구분합니다.

자세한 내용은 식별자 요구 사항 섹션을 참조하십시오.

COMPUTE_FAMILY = 'compute_family'

Postgres 인스턴스의 :doc:`인스턴스 크기 </user-guide/snowflake-postgres/postgres-instance-sizes>`를 지정합니다.

Snowflake Postgres는 다음 3가지 계층을 제공합니다.

  • **버스트 가능**(BURST_XS, BURST_S, BURST_M): 개발 및 간헐적 워크로드에 비용 효율적입니다. 저장소는 100GB로 제한되며 고가용성을 지원하지 않습니다.

  • **표준**(STANDARD_M~STANDARD _24XL): 범용 워크로드에 적합한 CPU 및 메모리의 균형을 맞춥니다. 고가용성을 포함한 모든 기능을 지원합니다.

  • 메모리 최적화 (HIGHMEM_L~HIGHMEM _48XL): 메모리 집약적인 쿼리 및 대규모 인덱스에 적합한 높은 메모리 대 CPU 비율을 제공합니다. 고가용성을 포함한 모든 기능을 지원합니다.

참고

일부 기능에는 특정 컴퓨팅 제품군이 필요합니다. 예를 들어, 고가용성(HIGH_AVAILABILITY = TRUE)은 STANDARD 및 HIGHMEM 인스턴스에서만 사용할 수 있으며, BURST 인스턴스에서는 사용할 수 없습니다.

STORAGE_SIZE_GB = storage_gb

저장소 크기를 GB로 지정합니다. 10에서 65,535 사이여야 합니다.

저장소는 할당된 양을 기준으로 컴퓨팅과 별도로 청구됩니다. ALTER POSTGRES INSTANCE를 사용하여 나중에 저장소 크기를 늘리거나 줄일 수 있습니다. 이러한 비용에 대한 자세한 내용은 Snowflake Postgres 비용 평가 섹션을 참조하세요.

참고

저장소 크기를 줄일 때는 인스턴스에 있는 데이터 양에 너무 가까운 수준으로 양을 줄일 수 없습니다. 새 크기는 인스턴스에서 현재 사용 중인 디스크 사용량의 1.4배 이상이어야 합니다. 이를 통해 자동 저장소 증가를 트리거하지 않고도 더 많은 데이터를 추가할 수 있습니다.

AUTHENTICATION_AUTHORITY = { POSTGRES | POSTGRES_OR_SNOWFLAKE }

인스턴스의 인증 방법을 지정합니다. POSTGRES는 Postgres에서 사용하는 비밀번호만 사용할 수 있음을 나타냅니다. POSTGRES_OR_SNOWFLAKE는 단기 액세스 토큰 비밀번호를 사용할 수도 있습니다. 자세한 내용은 Snowflake Postgres용 Snowflake 토큰 인증 섹션을 참조하십시오.

선택적 매개 변수

POSTGRES_VERSION = { 16 | 17 | 18 }

사용할 Postgres의 기본 버전을 지정합니다.

최신 버전에는 새로운 기능과 개선 사항이 포함되어 있지만, 애플리케이션 호환성을 위해 이전 버전을 선택하거나 기존 인스턴스와 일치시키기 위해 이전 버전을 선택할 수 있습니다. ALTER POSTGRES INSTANCE를 사용하여 나중에 최신 버전으로 업그레이드할 수 있습니다.

기본값: 최신 Postgres 버전입니다.

NETWORK_POLICY = 'network_policy'

인스턴스에 사용할 :doc:`네트워크 정책</user-guide/snowflake-postgres/postgres-network>`을 지정합니다. 이 매개 변수를 지정하려면 네트워크 정책 오브젝트에 대한 USAGE 권한이 부여되어야 합니다.

기본값: 네트워크 정책이 적용되지 않습니다.

중요

네트워크 정책이 없는 경우 인스턴스는 수신되는 연결을 수락할 수 없습니다. SHOW 및 DESCRIBE 명령을 사용하여 인스턴스를 계속 확인할 수 있지만, 네트워크 정책을 연결할 때까지는 ALTER POSTGRES INSTANCE를 사용하여 Postgres 데이터베이스에 연결할 수 없습니다.

STORAGE_INTEGRATION = 'storage_integration_name'

POSTGRES_EXTERNAL_STORAGE 유형의 저장소 통합을 Postgres 인스턴스에 연결하여 pg_lake 확장 프로그램이 외부 오브젝트 저장소의 데이터에 액세스할 수 있도록 활성화합니다. 전체 설정 프로시저는 pg_lake용 S3 저장소 구성하기 섹션을 참조하세요.

:doc:`alter-postgres-instance`를 사용하여 나중에 저장소 통합을 연결하거나 제거할 수도 있습니다.

기본값: 저장소 통합이 연결되어 있지 않습니다.

HIGH_AVAILABILITY = { TRUE | FALSE }

인스턴스에 대해 :doc:`고가용성 </user-guide/snowflake-postgres/high-availability>`을 활성화할지 여부를 지정합니다.

고가용성은 자동 장애 조치를 위해 별도의 가용 영역에 대기 인스턴스를 프로비저닝합니다. 그러면 기본 인스턴스를 사용할 수 없게 되는 경우 다운타임이 최소화됩니다. HA가 없으면 복구 시 백업에서 복원해야 하며, 대규모 인스턴스 또는 활성 인스턴스의 경우 몇 시간이 소요될 수 있습니다. ALTER POSTGRES INSTANCE를 사용하여 나중에 HA를 활성화 또는 비활성화하려면 :doc:`유지 관리 작업 </user-guide/snowflake-postgres/managing-instances>`이 필요합니다.

중요

버스트 가능 인스턴스 크기(BURST_XS, BURST_S, BURST_M)는 고 가용성을 지원하지 않습니다.

기본값: FALSE

POSTGRES_SETTINGS = 'json_string'

인스턴스에 대한 사용자 지정 :doc:`Postgres 서버 설정 </user-guide/snowflake-postgres/postgres-server-settings>`을 JSON 형식으로 지정합니다.

'{"component:name" = "value", ...}'
Copy

형식은 ``component:name``이며, 여기서 ``component``는 ``postgres``(PostgreSQL 서버 설정의 경우) 또는 ``pgbouncer``(연결 풀러 설정의 경우)입니다. 예:

'{"postgres:work_mem" = "128MB", "pgbouncer:default_pool_size" = "200"}'
Copy

사용 가능한 설정은 Snowflake Postgres 서버 설정 섹션을 참조하세요.

기본값: 사용자 지정 Postgres 구성 매개 변수가 설정되지 않았습니다.

COMMENT = 'string_literal'

Postgres 인스턴스에 대한 설명을 지정합니다.

설명은 “청구 서비스를 위한 프로덕션 인스턴스” 또는 “팀 X를 위한 QA 환경”과 같이 인스턴스의 목적이나 소유권을 문서화하는 데 유용합니다. 태그와 달리, 설명은 자유 형식의 텍스트이며 구성 또는 비용 추적에 사용되지 않습니다.

기본값: 값 없음.

TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )

태그 이름과 태그 문자열 값을 지정합니다.

태그 값은 항상 문자열이며, 태그 값의 최대 문자 수는 256자입니다.

문에서 태그를 지정하는 방법에 대한 자세한 내용은 태그 할당량 섹션을 참조하십시오.

포크 매개 변수

Snowflake Postgres 인스턴스를 포크하면 모든 스키마 오브젝트와 테이블 데이터가 동일한 복사본이 생성됩니다. 포크된 인스턴스가 인스턴스의 이전 상태를 반영하도록 시점을 지정할 수도 있습니다. 이를 통해 실수로 오브젝트를 삭제하는 것과 같은 데이터 무결성 문제로부터 복구할 수 있습니다. 동일한 데이터로 다른 인스턴스 구성을 시도하는 것과 같이 개발 및 테스트 환경에서 시나리오를 탐색할 수도 있습니다. 자세한 내용은 Snowflake Postgres 특정 시점 복구 섹션을 참조하십시오.

FORK source_instance

지정된 소스 인스턴스의 포크(복사본)로 새 인스턴스를 생성합니다.

{ AT | BEFORE } ( { TIMESTAMP => timestamp | OFFSET => time_difference } )

포크할 시점을 지정합니다. 10일 이상 지난 시점에서는 포크할 수 없습니다. 타임스탬프 또는 오프셋은 10일의 postgres 데이터 보존 기간 내에 있어야 합니다.

AT | BEFORE 절은 다음 매개 변수 중 하나를 허용합니다.

TIMESTAMP => timestamp

Time Travel에 사용할 정확한 날짜와 시간을 지정합니다. 값은 명시적으로 TIMESTAMP, TIMESTAMP_LTZ, TIMESTAMP_NTZ 또는 TIMESTAMP_TZ 데이터 타입에 캐스팅되어야 합니다.

OFFSET => time_difference

현재 시간과의 초 단위 차이를 -N 형식으로 지정합니다. 여기서 ``N``은 정수 또는 산술 식일 수 있습니다(예: ``-120``은 120초, ``-30*60``은 30분).

기본값: 현재 시간을 사용합니다.

포크를 생성할 때 다음 매개 변수는 선택 사항이며 기본값은 소스 인스턴스의 값입니다.

  • COMPUTE_FAMILY

  • STORAGE_SIZE_GB

  • HIGH_AVAILABILITY

  • POSTGRES_SETTINGS

출력

새 인스턴스를 생성할 때 이 명령은 다음 열이 있는 한 행을 반환합니다.

설명

status

생성 작업의 상태입니다.

host

인스턴스에 연결하기 위한 호스트 이름입니다.

access_roles

snowflake_admin 역할 및 application 역할의 사용자 이름과 비밀번호입니다.

default_database

인스턴스의 기본 데이터베이스입니다.

중요

access_roles 열에는 나중에 검색할 수 없는 자격 증명이 포함되어 있습니다. 이러한 세부 정보를 안전한 위치에 저장합니다.

포크를 생성하면 이 명령은 statushost 열만 있는 하나의 행을 반환합니다. 포크는 포크가 해당하는 시점에 소스 인스턴스와 동일한 자격 증명을 사용합니다.

액세스 제어 요구 사항

이 작업을 실행하는 데 사용되는 역할 에는 최소한 다음 권한 이 있어야 합니다.

권한

오브젝트

참고

CREATE POSTGRES INSTANCE

계정

기본적으로 ACCOUNTADMIN 역할에만 이 권한이 있습니다.

USAGE

네트워크 정책

NETWORK_POLICY를 지정하는 경우에만 필요합니다.

USAGE

저장소 통합

STORAGE_INTEGRATION를 지정하는 경우에만 필요합니다.

지정된 권한 세트로 사용자 지정 역할을 만드는 방법에 대한 지침은 사용자 지정 역할 만들기 섹션을 참조하십시오.

보안 오브젝트 에 대해 SQL 작업을 수행하기 위한 역할과 권한 부여에 대한 일반적인 정보는 액세스 제어의 개요 섹션을 참조하십시오.

사용법 노트

  • 새 인스턴스 생성을 완료하는 데는 시간이 다소 소요됩니다. 인스턴스는 빌드되는 동안 현재 :ref:`상태 <instance-states>`를 표시합니다. DESC POSTGRES INSTANCE 명령을 사용하여 인스턴스 설정 중에 상태를 추적할 수 있습니다.

  • 포크를 생성할 때는 자격 증명을 지정하거나 확인하지 않습니다. 이는 포크가 해당하는 시점에 소스 인스턴스와 동일한 자격 증명을 사용하기 때문입니다. 원래 인스턴스와 다른 사용자 세트에 대한 액세스 권한을 제공해야 하는 경우 나중에 포크된 인스턴스에 대한 자격 증명을 다시 생성할 수 있습니다.

  • 포크를 생성하는 데 필요한 시간은 소스 인스턴스의 데이터 양에 따라 다릅니다. 더 많은 데이터가 있는 더 큰 데이터베이스는 포크하는 데 시간이 더 오래 소요됩니다. 소스의 컴퓨팅 패밀리(인스턴스 크기)는 포크 기간에 큰 영향을 주지 않습니다.

  • 포크는 백업 및 미리 쓰기 로그(WAL) 재생을 사용하여 전체 데이터 복사를 수행하므로 포크된 인스턴스는 소스 인스턴스와 완전히 별개입니다. 소스 인스턴스를 삭제해도 해당 인스턴스에서 생성된 포크에는 영향을 주지 않습니다.

    참고

    Postgres 포크는 테이블에 제로 카피 기술을 사용하는 Snowflake Time Travel 기능의 일부가 아닙니다. 그러나 포크는 동일한 AT | BEFORE 구문을 사용하여 시점을 지정합니다.

  • 메타데이터 관련:

    주의

    고객은 Snowflake 서비스를 사용할 때 개인 데이터(사용자 오브젝트 제외), 민감한 데이터, 수출 통제 대상 데이터 또는 기타 규제 데이터가 메타데이터로 입력되지 않도록 해야 합니다. 자세한 내용은 Snowflake의 메타데이터 필드 섹션을 참조하십시오.

기본 Postgres 인스턴스를 생성합니다.

CREATE POSTGRES INSTANCE my_postgres
  COMPUTE_FAMILY = 'STANDARD_S'
  STORAGE_SIZE_GB = 50
  AUTHENTICATION_AUTHORITY = POSTGRES;
Copy

고가용성 및 네트워크 정책을 사용하여 Postgres 인스턴스를 생성합니다.

CREATE POSTGRES INSTANCE prod_postgres
  COMPUTE_FAMILY = 'STANDARD_M'
  STORAGE_SIZE_GB = 500
  AUTHENTICATION_AUTHORITY = POSTGRES
  POSTGRES_VERSION = 17
  HIGH_AVAILABILITY = TRUE
  NETWORK_POLICY = 'my_network_policy'
  COMMENT = 'Production Postgres instance';
Copy

인스턴스를 생성하고 나중에 네트워크 정책을 구성합니다.

-- Step 1: Create instance without network policy
CREATE POSTGRES INSTANCE my_postgres
  COMPUTE_FAMILY = 'STANDARD_S'
  STORAGE_SIZE_GB = 50
  AUTHENTICATION_AUTHORITY = POSTGRES;

-- Step 2: Monitor instance creation
DESCRIBE POSTGRES INSTANCE my_postgres
  ->> SELECT "property", "value"
      FROM $1
      WHERE "property" IN ('name', 'state', 'host');

-- Step 3: Once READY, attach network policy to enable connections
ALTER POSTGRES INSTANCE my_postgres
  SET NETWORK_POLICY = 'my_network_policy';

-- Step 4: Now you can connect to the Postgres database using the host and credentials
-- from the CREATE output
Copy

기존 인스턴스의 포크를 생성합니다.

CREATE POSTGRES INSTANCE my_fork
  FORK my_source_instance;
Copy

특정 시점에 포크를 생성합니다.

CREATE POSTGRES INSTANCE my_fork
  FORK my_source_instance
  AT (TIMESTAMP => '2025-01-15 12:00:00'::TIMESTAMP_NTZ);
Copy

다른 인스턴스 크기로 2시간 전의 포크를 생성합니다.

CREATE POSTGRES INSTANCE my_fork
  FORK my_source_instance
  AT (OFFSET => -7200)
  COMPUTE_FAMILY = 'STANDARD_L';
Copy

더 큰 인스턴스 크기와 다른 저장소로 보고할 포크를 생성합니다.

-- Fork production instance for reporting workload
CREATE POSTGRES INSTANCE reporting_instance
  FORK prod_instance
  COMPUTE_FAMILY = 'HIGHMEM_XL'
  STORAGE_SIZE_GB = 500
  COMMENT = 'Dedicated reporting instance to offload analytics queries';
Copy

일일 테스트를 위해 자정(UTC)에 포크를 생성합니다.

-- Fork at start of day (midnight UTC)
CREATE POSTGRES INSTANCE daily_test_instance
  FORK prod_instance
  AT (TIMESTAMP => '2026-02-05 00:00:00'::TIMESTAMP_NTZ);
Copy

비용을 절감하기 위해 HA가 비활성화된 개발 포크를 생성합니다.

CREATE POSTGRES INSTANCE dev_instance
  FORK prod_instance
  COMPUTE_FAMILY = 'STANDARD_S'
  STORAGE_SIZE_GB = 100
  HIGH_AVAILABILITY = FALSE
  COMMENT = 'Development environment from prod data';
Copy

실수로 데이터를 삭제한 경우 인시던트 이전의 포크를 사용하여 복구합니다.

-- Recover by forking from 30 minutes ago
CREATE POSTGRES INSTANCE recovered_instance
  FORK damaged_instance
  AT (OFFSET => -1800)
  COMMENT = 'Recovery fork from before data deletion';
Copy