ALTER DATABASE
更改数据库的属性。
所需的权限
要使用 ALTER DATABASE,需要以下权限之一。
Superuser
具有 ALTER DATABASE 权限的用户
数据库拥有者
语法
ALTER DATABASE database_name { RENAME TO new_name | OWNER TO new_owner | CONNECTION LIMIT { limit | UNLIMITED } | COLLATE { CASE_SENSITIVE | CASE_INSENSITIVE } | ISOLATION LEVEL { SERIALIZABLE | SNAPSHOT } | INTEGRATION {{SET REFRESH_INTERVAL <interval>} | REFRESH {{ ALL | INERROR } TABLES [IN SCHEMA schema [, ...]] | TABLE schema.table [, ...]}} }
参数
- database_name
-
要更改的数据库的名称。通常,您将更改当前未连接到的数据库;在任何情况下,更改只在后续的会话中才会生效。您可以更改当前数据库的所有者,但不能重命名该数据库:
alter database tickit rename to newtickit; ERROR: current database may not be renamed
- RENAME TO
-
重命名指定的数据库。有关有效名称的更多信息,请参阅名称和标识符。不能重命名 dev、padb_harvest、template0、template1 或 sys:internal 数据库,也不能重命名当前数据库。只有数据库所有者或 superuser 可以重命名数据库;非超级用户所有者还必须具有 CREATEDB 权限。
- new_name
-
新数据库名称。
- OWNER TO
-
更改指定数据库的所有者。您可以更改当前数据库或其他某个数据库的所有者。只有超级用户可以更改所有者。
- new_owner
-
新数据库所有者。新所有者必须是具有写入权限的现有数据库用户。有关用户权限的更多信息,请参阅GRANT。
- CONNECTION LIMIT { limit | UNLIMITED }
-
允许用户同时打开的数据库连接的最大数量。此限制不适用于超级用户。使用 UNLIMITED 关键字设置允许的并行连接的最大数量。可能对每个用户的连接数量也会施加限制。有关更多信息,请参阅 CREATE USER。默认为 UNLIMITED。要查看当前连接,请查询 STV_SESSIONS 系统视图。
注意
如果用户及数据库连接限制均适用,当用户尝试连接时,必须有一个同时低于这两个限制的未使用的连接槽可用。
- COLLATE { CASE_SENSITIVE | CASE_INSENSITIVE }
-
指定字符串搜索或比较是区分大小写还是不区分大小写的子句。
您可以更改当前的空数据库的区分大小写。
您必须具有对当前数据库的权限才能更改区分大小写。具有 CREATE DATABASE 权限的超级用户或数据库拥有者也可以更改数据库的区分大小写设置。
- ISOLATION LEVEL { SERIALIZABLE | SNAPSHOT }
-
指定针对数据库运行查询时使用的隔离级别的子句。
SERIALIZABLE 隔离–为并发事务提供完全可序列性。有关更多信息,请参阅 可序列化的隔离。
SNAPSHOT 隔离 – 提供隔离级别,来防止出现更新和删除冲突。
有关隔离级别的更多信息,请参阅 CREATE DATABASE。
更改数据库的隔离级别时,请考虑以下项目:
您必须对当前数据库具有超级用户或 CREATE DATABASE 权限,才能更改数据库隔离级别。
您不能更改
dev
数据库的隔离级别。您不能更改事务块中的隔离级别。
如果有其他用户连接到数据库,则更改隔离级别命令将失败。
更改隔离级别命令可以更改当前会话的隔离级别设置。
- INTEGRATION REFRESH {{ ALL | INERROR } TABLES [IN SCHEMA schema [, ...]] | TABLE schema.table [, ...]}
指定 Amazon Redshift 是否刷新指定架构或表中的所有表或有错误的表的子句。刷新将触发从源数据库完全复制指定架构或表中的表。
有关更多信息,请参阅《Amazon Redshift 管理指南》中的使用零 ETL 集成。有关集成状态的更多信息,请参阅SVV_INTEGRATION_TABLE_STATE和SVV_INTEGRATION。
- INTEGRATION {SET REFRESH_INTERVAL <interval>}
-
SET REFRESH_INTERVAL 子句设置从零 ETL 源到目标数据库刷新数据的大致时间间隔(秒)。对于源类型为 Aurora MySQL、Aurora PostgreSQL 或 RDS for MySQL 的零 ETL 集成,该值可设置为 0-432000 秒(5 天)。
有关使用零 ETL 集成创建数据库的更多信息,请参阅《Amazon Redshift 管理指南》中的在 Amazon Redshift 中创建目标数据库。
使用说明
ALTER DATABASE 命令应用于后续会话,而不应用于当前会话。您必须重新连接到更改后的数据库,以查看更改结果。
示例
以下示例将一个名为 TICKIT_SANDBOX 的数据库重命名为 TICKIT_TEST:
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_integration_db
中的表 schema1.sample_table1
和 schema2.sample_table2
。
ALTER DATABASE sample_integration_db INTEGRATION REFRESH TABLES 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_schema
中处于 ErrorState
的所有表。
ALTER DATABASE sample_integration_db INTEGRATION REFRESH INERROR TABLES in SCHEMA sample_schema;