ALTER POSTGRES INSTANCE

修改现有 Snowflake Postgres 实例 属性。

另请参阅:

CREATE POSTGRES INSTANCE, DESCRIBE POSTGRES INSTANCE, DROP POSTGRES INSTANCE, SHOW POSTGRES INSTANCES

语法

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> ... ]

参数

name

指定要更改的 Postgres 实例的标识符。

如果标识符包含空格或特殊字符,则整个字符串必须放在双引号内。放在双引号内的标识符也区分大小写。

有关更多信息,请参阅 标识符要求

RENAME TO new_name

将 Postgres 实例的名称更改为指定的新名称。新的标识符必须在账户中是唯一的。

有关标识符的更多详细信息,请参阅 标识符要求

RESET ACCESS FOR { 'snowflake_admin' | 'application' }

重新生成 snowflake_adminapplication 角色的凭据。返回包含以下列的一行:

  • password

有关更多信息,请参阅 Snowflake Postgres 角色

SET ...

为 Postgres 实例设置一个或多个指定属性:

NETWORK_POLICY = 'network_policy'

指定用于实例的 网络策略。策略更改可能需要最多 2 分钟才能生效。

要指定此参数,您必须已获得网络策略对象上的 USAGE 权限。

AUTHENTICATION_AUTHORITY = { POSTGRES | POSTGRES_OR_SNOWFLAKE }

Change 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.

COMMENT = 'string_literal'

添加或覆盖 Postgres 实例的现有注释。

HIGH_AVAILABILITY = { TRUE | FALSE }

对于该实例,启用或禁用 高可用性。作为异步操作执行。运行 DESCRIBE POSTGRES INSTANCE 命令和监控跟踪进度的 operations 字段。

仅当实例位于 READY 状态,并且没有其他操作正在运行,才能发起高可用性变更。

备注

突发型实例大小(BURST_XS、BURST_S、BURST_M)不支持高可用性。要启用 HA,您必须首先更改为 STANDARD 或 HIGHMEM 计算系列。

COMPUTE_FAMILY = 'compute_family'

对于 Postgres 实例,指定新的 实例大小

STORAGE_SIZE_GB = storage_gb

指定新的存储大小,单位为 GB。支持增加和减少。

备注

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.

STORAGE_INTEGRATION = 'storage_integration_name'

将类型为 POSTGRES_EXTERNAL_STORAGE 的存储集成附加到 Postgres 实例,使 pg_lake 扩展能够访问外部对象存储中的数据。有关完整的设置步骤,请参阅 为 pg_lake 配置 S3 存储

POSTGRES_VERSION = { 16 | 17 | 18 }

指定要升级到的 Postgres 主要版本。您只能升级到较新的版本;不支持降级。

MAINTENANCE_WINDOW_START = hour_of_day

指定一天中可以开始维护时段的小时数(0-23、UTC)。维护时段为从指定小时开始的三小时时段。

POSTGRES_SETTINGS = 'json_string'

指定以 JSON 格式对实例的 Postgres 服务器设置 进行更改:

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

某些设置需要重新启动实例才能生效。除非您指定 APPLY IMMEDIATELY,否则不会应用这些更改。

APPLY IMMEDIATELY

替换任何定义的维护时段,并在指定操作就绪后立即应用它们。适用于 COMPUTE_FAMILYSTORAGE_SIZE_GBPOSTGRES_VERSIONPOSTGRES_SETTINGS

APPLY ON 'timestamp'

替换任何定义的维护时段,并在给定时间戳应用指定的操作。时间戳不能超过未来 72 小时。

支持的时间戳格式:

  • yyyy-MM-dd

  • yyyy-MM-dd HH:mm

  • yyyy-MM-dd HH:mm:ss

  • yyyy-MM-dd HH:mm zzz

UNSET ...

取消设置 Postgres 实例的一个或多个指定属性,将其重置为默认值:

  • COMMENT

  • POSTGRES_SETTINGS

  • NETWORK_POLICY

  • MAINTENANCE_WINDOW_START – 取消设置会导致所有正在进行的操作在完成后立即应用。

  • STORAGE_INTEGRATION – 从实例中移除存储集成,禁用 pg_lake 对外部存储的访问。

要使用单个 ALTER 语句取消设置多个属性或参数,请使用逗号分隔每个属性或参数。

取消设置属性或参数时,只指定属性或参数名称(除非上述语法表明您应该指定值)。指定值会返回错误。

SUSPEND

暂停 Postgres 实例。当磁盘镜像保留在存储中时,虚拟机器将被停用。正常计费已暂停,但存储成本继续累积。保留现有备份。

RESUME

恢复暂停的 Postgres 实例。如果有待重启的操作,则在实例恢复时应用这些操作。

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

指定 标签 名称和标签字符串值。

标签值始终为字符串,标签值的最大字符数为 256。

有关在语句中指定标签的信息,请参阅 Tag quotas

访问控制要求

用于执行此操作的 角色 必须至少具有以下 权限

权限

对象

备注

OWNERSHIP 或 OPERATE

Postgres 实例

修改实例属性时需要。

USAGE

网络策略

仅当指定 NETWORK_POLICY 时需要。

USAGE

存储集成

仅当指定 STORAGE_INTEGRATION 时需要。

有关创建具有指定权限集的自定义角色的说明,请参阅 创建自定义角色

有关对 安全对象 执行 SQL 操作的相应角色和权限授予的一般信息,请参阅 访问控制概述

使用说明

  • 更改为 COMPUTE_FAMILYSTORAGE_SIZE_GBPOSTGRES_VERSION 统称为“升级”操作,可以一起执行。运行 DESCRIBE POSTGRES INSTANCE 命令和监控跟踪进度的 operations 字段。

  • 仅当实例位于 READY 状态,并且没有其他操作正在运行,才能启动升级操作。

  • 如果实例定义了维护时段,则在维护时段开始之前,更改不会生效,除非已指定 APPLY IMMEDIATELY。维护时段控制应用变更的 时间,而不是控制实例是否正在运行。有关维护操作的更多详细信息,请参阅 Snowflake Postgres 实例管理

  • 执行实例管理操作需要短暂的服务中断。 确保您的应用程序能够自动重新连接到数据库。

  • SUSPEND 和 RESUME 是停止和启动实例计费的立即操作。它们与维护时段不同,维护时段会安排配置更改(例如升级或 HA 启用)生效。

  • 除非您显式重新生成凭据,否则实例的连接字符串在实例管理操作中保持不变。

  • 关于元数据:

    注意

    客户应确保在使用 Snowflake 服务时,不会将个人数据(用户对象除外)、敏感数据、出口管制数据或其他受监管数据作为元数据输入。有关更多信息,请参阅 Snowflake 中的元数据字段

示例

更改 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 中的标识符,但 不会 更改连接主机名。主机名保持不变,因此现有连接和应用程序无需修改即可继续工作。