

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# ALTER DATABASE
<a name="r_ALTER_DATABASE"></a>

更改数据库的属性。

## 所需的权限
<a name="r_ALTER_DATABASE-privileges"></a>

要使用 ALTER DATABASE，需要以下权限之一。
+ Superuser
+ 具有 ALTER DATABASE 权限的用户
+ 数据库拥有者

## 语法
<a name="r_ALTER_DATABASE-synopsis"></a>

```
ALTER DATABASE database_name
{ 
  RENAME TO new_name
  | OWNER TO new_owner
  | [ CONNECTION LIMIT { limit | UNLIMITED } ]
    [ COLLATE { CASE_SENSITIVE | CS | CASE_INSENSITIVE | CI } ]
    [ ISOLATION LEVEL { SNAPSHOT | SERIALIZABLE } ]
| INTEGRATION
 { 
  REFRESH { { ALL | INERROR } TABLES [ IN SCHEMA schema [, ...] ] | TABLE schema.table [, ...] }
   | SET 
     [ QUERY_ALL_STATES [=] { TRUE | FALSE } ] 
     [ ACCEPTINVCHARS [=] { TRUE | FALSE } ] 
     [ REFRESH_INTERVAL <interval> ]
     [ TRUNCATECOLUMNS [=] { TRUE | FALSE } ]
     [ HISTORY_MODE [=] {TRUE | FALSE} [ FOR { {ALL} TABLES [IN SCHEMA schema [, ...] ] | TABLE schema.table [, ...] } ] ]
 }
}
```

## 参数
<a name="r_ALTER_DATABASE-parameters"></a>

 *database\$1name*   
要更改的数据库的名称。通常，您将更改当前未连接到的数据库；在任何情况下，更改只在后续的会话中才会生效。您可以更改当前数据库的所有者，但不能重命名该数据库：  

```
alter database tickit rename to newtickit;
ERROR:  current database may not be renamed
```

RENAME TO   
重命名指定的数据库。有关有效名称的更多信息，请参阅[名称和标识符](r_names.md)。不能重命名 dev、padb\$1harvest、template0、template1 或 sys:internal 数据库，也不能重命名当前数据库。只有数据库所有者或 [superuser](r_superusers.md#def_superusers) 可以重命名数据库；非超级用户所有者还必须具有 CREATEDB 权限。

 *new\$1name*   
新数据库名称。

OWNER TO   
更改指定数据库的所有者。您可以更改当前数据库或其他某个数据库的所有者。只有超级用户可以更改所有者。

 *new\$1owner*   
新数据库所有者。新所有者必须是具有写入权限的现有数据库用户。有关用户权限的更多信息，请参阅[GRANT](r_GRANT.md)。

CONNECTION LIMIT \$1 *limit* \$1 UNLIMITED \$1   
允许用户同时打开的数据库连接的最大数量。此限制不适用于超级用户。使用 UNLIMITED 关键字设置允许的并行连接的最大数量。可能对每个用户的连接数量也会施加限制。有关更多信息，请参阅 [CREATE USER](r_CREATE_USER.md)。默认为 UNLIMITED。要查看当前连接，请查询 [STV\$1SESSIONS](r_STV_SESSIONS.md) 系统视图。  
如果用户及数据库连接限制均适用，当用户尝试连接时，必须有一个同时低于这两个限制的未使用的连接槽可用。

COLLATE \$1 CASE\$1SENSITIVE \$1 CS \$1 CASE\$1INSENSITIVE \$1 CI \$1  
指定字符串搜索或比较是区分大小写还是不区分大小写的子句。  
您可以更改当前数据库的区分大小写，即使数据库为空也是如此。  
您必须对当前数据库具有 ALTER 权限，才能更改区分大小写设置。具有 CREATE DATABASE 权限的超级用户或数据库拥有者也可以更改数据库的区分大小写设置。  
CASE\$1SENSITIVE 和 CS 可以互换，生成的结果相同。同样，CASE\$1INSENSITIVE 和 CI 可以互换，生成的结果相同。

ISOLATION LEVEL \$1 SNAPSHOT \$1 SERIALIZABLE \$1  
指定针对数据库运行查询时使用的隔离级别的子句。有关隔离级别的更多信息，请参阅[Amazon Redshift 中的隔离级别](c_serial_isolation.md)。  
+ SNAPSHOT 隔离 – 提供隔离级别，来防止出现更新和删除冲突。
+ SERIALIZABLE 隔离–为并发事务提供完全可序列性。
更改数据库的隔离级别时，请考虑以下项目：  
+ 您必须对当前数据库具有超级用户或 CREATE DATABASE 权限，才能更改数据库隔离级别。
+ 您不能更改 `dev` 数据库的隔离级别。
+ 您不能更改事务块中的隔离级别。
+ 如果有其他用户连接到数据库，则更改隔离级别命令将失败。
+ 更改隔离级别命令可以更改当前会话的隔离级别设置。

INTEGRATION  
更改零 ETL 集成数据库。

REFRESH \$1\$1 ALL \$1 INERROR \$1 TABLES [IN SCHEMA *schema* [, ...]] \$1 TABLE *schema.table* [, ...]\$1  
指定 Amazon Redshift 是否刷新指定架构或表中的所有表或有错误的表的子句。刷新将触发从源数据库完全复制指定架构或表中的表。  
有关更多信息，请参阅《Amazon Redshift 管理指南》**中的[零 ETL 集成](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-using.html)。有关集成状态的更多信息，请参阅[SVV\$1INTEGRATION\$1TABLE\$1STATE](r_SVV_INTEGRATION_TABLE_STATE.md)和[SVV\$1INTEGRATION](r_SVV_INTEGRATION.md)。

QUERY\$1ALL\$1STATES [=] \$1 TRUE \$1 FALSE \$1  
QUERY\$1ALL\$1STATES 子句设置是否可以在所有状态（`Synced`、`Failed`、`ResyncRequired` 和 `ResyncInitiated`）下查询零 ETL 集成表。默认情况下，只能在 `Synced` 状态下查询零 ETL 集成表。

ACCEPTINVCHARS [=] \$1 TRUE \$1 FALSE \$1  
ACCEPTINVCHARS 子句设置在检测到 VARCHAR 数据类型的无效字符时，零 ETL 集成表是否继续摄取。在遇到无效字符时，无效字符将被替换为默认 `?` 字符。

REFRESH\$1INTERVAL <interval>  
REFRESH\$1INTERVAL 子句设置将数据从零 ETL 源刷新到目标数据库的大致时间间隔（秒）。对于源类型为 Aurora MySQL、Aurora PostgreSQL 或 RDS for MySQL 的零 ETL 集成，`interval` 可设置为 0-432000 秒（5 天）。对于 Amazon DynamoDB 零 ETL 集成，`interval` 可设置为 900-432000 秒（15 分钟 - 5 天）。  
有关使用零 ETL 集成创建数据库的更多信息，请参阅*《Amazon Redshift 管理指南》*中的[在 Amazon Redshift 中创建目标数据库](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-using.creating-db.html)。

TRUNCATECOLUMNS [=] \$1 TRUE \$1 FALSE \$1  
TRUNCATECOLUMNS 子句设置当 VARCHAR 列或 SUPER 列属性的值超出限制时，零 ETL 集成表是否继续摄取。当为 `TRUE` 时，值会被截断以适合该列，而溢出的 JSON 属性的值会被截断以适合 SUPER 列。

HISTORY\$1MODE [=] \$1TRUE \$1 FALSE\$1 [ FOR \$1 \$1ALL\$1 TABLES [IN SCHEMA schema [, ...]] \$1 TABLE schema.table [, ...]\$1 ]  
一个子句，用于指定 Amazon Redshift 是否为所有表或指定架构中参与零 ETL 集成的表设置历史记录模式。此选项仅适用于为零 ETL 集成创建的数据库。  
HISTORY\$1MODE 子句可设置为 `TRUE` 或 `FALSE`。默认值为 `FALSE`。启用和禁用历史记录模式仅适用于处于 `Synced` 状态的表。有关 HISTORY\$1MODE 的信息，请参阅《Amazon Redshift 管理指南》**中的[历史记录模式](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-history-mode.html)。

## 使用说明
<a name="r_ALTER_DATABASE-usage-notes"></a>

ALTER DATABASE 命令应用于后续会话，而不应用于当前会话。您必须重新连接到更改后的数据库，以查看更改结果。

## 示例
<a name="r_ALTER_DATABASE-examples"></a>

以下示例将一个名为 TICKIT\$1SANDBOX 的数据库重命名为 TICKIT\$1TEST：

```
alter database tickit_sandbox rename to tickit_test;
```

以下示例将 TICKIT 数据库（当前数据库）的所有者更改为 DWUSER：

```
alter database tickit owner to dwuser;
```

以下示例更改了 sampledb 数据库的数据库区分大小写：

```
ALTER DATABASE sampledb COLLATE CASE_INSENSITIVE;
```

以下示例使用 SNAPSHOT 隔离级别更改名为 **sampledb** 的数据库。

```
ALTER DATABASE sampledb ISOLATION LEVEL SNAPSHOT;
```

以下示例刷新零 ETL 集成的数据库 **sample\$1integration\$1db** 中的表 **schema1.sample\$1table1** 和 **schema2.sample\$1table2**。

```
ALTER DATABASE sample_integration_db INTEGRATION REFRESH TABLE schema1.sample_table1, schema2.sample_table2;
```

以下示例刷新零 ETL 集成中所有已同步和失败的表。

```
ALTER DATABASE sample_integration_db INTEGRATION REFRESH ALL tables;
```

下面的示例将零 ETL 集成的刷新间隔设置为 600 秒。

```
ALTER DATABASE sample_integration_db INTEGRATION SET REFRESH_INTERVAL 600;
```

下面的示例刷新架构 **sample\$1schema** 中处于 `ErrorState` 的所有表。

```
ALTER DATABASE sample_integration_db INTEGRATION REFRESH INERROR TABLES in SCHEMA sample_schema;
```

以下示例为表 `myschema.table1` 启用历史记录模式。

```
ALTER DATABASE sample_integration_db INTEGRATION SET HISTORY_MODE = true FOR TABLE myschema.table1
```

以下示例为 `myschema` 中的所有表启用历史记录模式。

```
ALTER DATABASE sample_integration_db INTEGRATION SET HISTORY_MODE = true for ALL TABLES IN SCHEMA myschema
```