CREATE POSTGRES INSTANCE¶
创建一个新的 Snowflake Postgres 实例 或创建现有实例的分支。
分支使用 时间点恢复 (PITR),在特定时间点创建实例的 完整、独立副本:这对于从生产数据恢复、测试或创建开发环境非常有用。
- 另请参阅:
ALTER POSTGRES INSTANCE, DESCRIBE POSTGRES INSTANCE, DROP POSTGRES INSTANCE, SHOW POSTGRES INSTANCES
语法¶
The following syntax creates a fork of an existing instance at a point in time. The FORK clause uses point-in-time recovery with the same AT | BEFORE syntax as Time Travel, but creates a full physical copy of the Postgres instance:
必填参数¶
name指定 Postgres 实例的标识符(名称);对于账户必须是唯一的。
此外,标识符必须以字母字符开头,且不能包含空格或特殊字符,除非整个标识符字符串放在双引号内(例如,
"My object")。放在双引号内的标识符也区分大小写。有关更多信息,请参阅 标识符要求。
COMPUTE_FAMILY = 'compute_family'为 Postgres 实例指定 实例大小。
Snowflake Postgres 提供三个级别:
**突发型**(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 成本评估。
备注
When you decrease the storage size, you can't set it too close to current disk usage. The new size must be at least 1.4x the disk space currently in use. That way, there's still room to add more data without triggering an automatic storage increase.
AUTHENTICATION_AUTHORITY = { POSTGRES | POSTGRES_OR_SNOWFLAKE }Specifies the authentication method for the instance. POSTGRES indicates that only Postgres user passwords can be used. POSTGRES_OR_SNOWFLAKE also allows the use of short-lived access token passwords. See Snowflake Postgres 的 Snowflake 令牌身份验证 for more details.
可选参数¶
POSTGRES_VERSION = { 16 | 17 | 18 }指定要使用的 Postgres 主要版本。
虽然最新版本包含新功能和改进,但出于应用程序兼容性或匹配现有实例的目的,您可以选择较旧的版本。您可以稍后使用 ALTER POSTGRES INSTANCE 升级至更新的版本。
默认值:None。最新的 Postgres 版本。
NETWORK_POLICY = 'network_policy'指定用于实例的 网络策略。要指定此参数,您必须已获得网络策略对象的 USAGE 权限。
默认值:None。不应用网络策略。
重要
如果没有网络策略,实例将无法接受传入连接。您仍然可以使用 SHOW 和 DESCRIBE 命令查看实例,但在使用 ALTER POSTGRES INSTANCE 附加网络策略之前无法连接到 Postgres 数据库。
STORAGE_INTEGRATION = 'storage_integration_name'将类型为
POSTGRES_EXTERNAL_STORAGE的存储集成附加到 Postgres 实例,使 pg_lake 扩展能够访问外部对象存储中的数据。有关完整的设置步骤,请参阅 为 pg_lake 配置 S3 存储。您以后也可以使用 ALTER POSTGRES INSTANCE 附加或移除存储集成。
默认值:None。未附加存储集成。
HIGH_AVAILABILITY = { TRUE | FALSE }指定是否为实例启用 高可用性。
高可用性会在单独的可用区中配置备用实例,以实现自动故障转移。这样可以在主数据库不可用时,最大限度地缩短停机时间。如果没有 HA,恢复需要从备份中恢复,对于大型或活动实例,这可能需要数小时。请注意,启用或禁用 HA 稍后使用 ALTER POSTGRES INSTANCE 需要一项 维护操作。
重要
突发型实例大小(BURST_XS、BURST_S、BURST_M)不支持高可用性。
默认:
FALSEPOSTGRES_SETTINGS = 'json_string'以 JSON 格式为实例指定自定义 Postgres 服务器设置:
该格式使用
component:name,其中component是 ``postgres``(适用于 PostgreSQL 服务器设置)或 ``pgbouncer``(适用于连接池管理器设置)。例如:请参阅 Snowflake Postgres 服务器设置 了解可用设置。
默认值:None。未设置自定义 Postgres 配置参数。
COMMENT = 'string_literal'指定 Postgres 实例的注释。
注释对于记录实例的用途或所有权非常有用,例如“计费服务的生产示例”或“X 团队的 QA 环境”。与标签不同,注释是自由形式的文本,不用于组织或成本跟踪。
默认:无值。
TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )指定 标签 名称和标签字符串值。
标签值始终为字符串,标签值的最大字符数为 256。
有关在语句中指定标签的信息,请参阅 Tag quotas。
分支参数¶
为 Snowflake Postgres 实例创建分支会创建一个完全相同的副本,其中包含所有相同的架构对象和表数据。您还可以指定一个时间点,以便创建了分支的实例反映实例的先前状态。这样,您就可以从数据完整性问题中恢复,例如意外删除对象。您还可以探索开发和测试环境中的场景,例如使用相同的数据尝试不同的实例配置。有关更多信息,请参阅 Snowflake Postgres 时间点恢复。
FORK source_instance创建一个新实例作为指定源实例的分支(副本)。
{ AT | BEFORE } ( { TIMESTAMP => timestamp | OFFSET => time_difference } )指定要进行分支的时间点。您不能从过去 10 天前的时间点创建分支。时间戳或偏移量必须在 Postgres 10 天数据保留期内。
AT | BEFORE 子句接受以下参数之一:
TIMESTAMP => timestamp指定要用于 Time Travel 的确切日期和时间。该值必须显式转换为 TIMESTAMP、TIMESTAMP_LTZ、TIMESTAMP_NTZ 或 TIMESTAMP_TZ 数据类型。
OFFSET => time_difference指定与当前时间的差值(以秒为单位),格式为
-N,其中N可以是整数或算术表达式(例如,-120为 120 秒,-30*60为 30 分钟)。
默认值:None。使用当前时间。
创建分支时,以下参数是可选参数,默认为源实例中的值:
COMPUTE_FAMILYSTORAGE_SIZE_GBHIGH_AVAILABILITYPOSTGRES_SETTINGS
输出¶
创建新实例时,该命令将返回一行,其中包含以下列:
列 |
描述 |
|---|---|
|
创建操作的状态。 |
|
用于连接到实例的主机名。 |
|
|
|
实例的默认数据库。 |
重要
access_roles 列包含无法稍后检索的凭据。将这些详细信息保存在安全位置。
创建分支时,该命令仅返回包含 status 和 host 列的一行。在分支对应的时间点,分支与源实例使用相同的凭据。
访问控制要求¶
权限 |
对象 |
备注 |
|---|---|---|
CREATE POSTGRES INSTANCE |
账户 |
默认情况下,只有 ACCOUNTADMIN 角色具有此权限。 |
USAGE |
网络策略 |
仅当指定 NETWORK_POLICY 时需要。 |
USAGE |
存储集成 |
仅当指定 STORAGE_INTEGRATION 时需要。 |
有关创建具有指定权限集的自定义角色的说明,请参阅 创建自定义角色。
使用说明¶
创建新实例需要一些时间才能完成。在构建过程中,实例显示其当前的 状态。在实例设置期间,您可以使用 DESC POSTGRES INSTANCE 命令来跟踪状态。
创建分支时,您不会指定或查看凭据。这是因为在分支对应的时间点,分支使用的是源实例拥有的相同凭据。如果您需要向不同于原始实例的一组用户提供访问权限,您可以稍后为创建了分支的实例重新生成凭据。
The time needed to create a fork depends on the amount of data in the source instance. Larger databases with more data take longer to fork. The compute family (instance size) of the source doesn't significantly affect fork duration.
创建分支时使用备份和预写日志 (WAL) 回放执行完整数据复制,这意味着,创建了分支的实例是完全独立的:删除源实例不会影响您通过其创建的任何分支。
备注
Postgres forking isn't part of the Snowflake Time Travel feature, which uses zero-copy technology for tables. However, forking uses the same AT | BEFORE syntax to specify a point in time.
关于元数据:
注意
客户应确保在使用 Snowflake 服务时,不会将个人数据(用户对象除外)、敏感数据、出口管制数据或其他受监管数据作为元数据输入。有关更多信息,请参阅 Snowflake 中的元数据字段。
示例¶
创建基本 Postgres 实例:
创建具有高可用性和网络策略的 Postgres 实例:
稍后创建实例并配置网络策略:
创建现有实例的分支:
在特定时间点创建分支:
创建 2 小时前且实例大小不同的分支:
使用更大的实例大小和不同的存储创建用于报告的分支:
在午夜 (UTC) 创建分支,用于每日测试:
创建一个 HA 处于禁用状态的开发分支,以降低成本:
使用事件发生前的分支,从意外数据删除中恢复:
