ALTER DATABASE - Amazon Redshift

Amazon Redshift 自 2025 年 11 月 1 日起不再支援建立新的 Python UDF。如果您想要使用 Python UDF,請在該日期之前建立 UDF。現有 Python UDF 將繼續正常運作。如需詳細資訊,請參閱部落格文章

ALTER DATABASE

變更資料庫的屬性。

所需權限

若要使用 ALTER DATABASE,需要下列其中一項權限。

  • 超級使用者

  • 具有 ALTER DATABASE 權限的使用者

  • 資料庫擁有者

語法

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 [, ...] } ] ] } }

參數

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 | CS | CASE_INSENSITIVE | CI }

指定字串搜尋或比較是否區分大小寫的子句。

您可以變更目前資料庫的區分大小寫設定,即使資料庫是空的。

您必須擁有目前資料庫的 ALTER 許可,才能變更區分大小寫的設定。具有 CREATE DATABASE 許可的超級使用者或資料庫擁有者也可以變更資料庫的區分大小寫設定。

CASE_SENSITIVE 和 CS 可互換,並產生相同的結果。同樣地,CASE_INSENSITIVE 和 CI 可互換,並產生相同的結果。

ISOLATION LEVEL { SNAPSHOT | SERIALIZABLE }

指定對資料庫執行查詢時所用隔離層級的子句。如需隔離層級的詳細資訊,請參閱 Amazon Redshift 中的隔離層級

  • SNAPSHOT 隔離 — 提供隔離層級,防止更新和刪除衝突。

  • SERIALIZABLE 隔離 — 為並行交易提供完整的序列化。

修改資料庫的隔離層級時,請考慮下列項目:

  • 您必須擁有目前資料庫的超級使用者或 CREATE DATABASE 權限,才能變更資料庫隔離層級。

  • 您無法變更 dev 資料庫的隔離層級。

  • 您無法變更交易區塊中的隔離等級。

  • 如果其他使用者連線到資料庫,修改隔離層級命令就會失敗。

  • 修改隔離層級命令可以修改目前工作階段的隔離層級設定。

INTEGRATION

修改零 ETL 整合資料庫。

REFRESH {{ ALL | INERROR } TABLES [IN SCHEMA schema [, ...]] | TABLE schema.table [, ...]}

指定 Amazon Redshift 是否會重新整理指定結構描述或資料表中的所有資料表或發生錯誤之資料表的子句。重新整理會觸發指定結構描述或資料表中的資料表,從來源資料庫完全複製。

如需詳細資訊,請參閱《Amazon Redshift 管理指南》中的零 ETL 整合。如需整合狀態的詳細資訊,請參閱 SVV_INTEGRATION_TABLE_STATESVV_INTEGRATION

QUERY_ALL_STATES [=] { TRUE | FALSE }

QUERY_ALL_STATES 子句會設定零 ETL 整合資料表是否在所有狀態 (SyncedFailedResyncRequiredResyncInitiated) 下均可供查詢。根據預設,零 ETL 整合資料表只有在 Synced 狀態下可供查詢。

ACCEPTINVCHARS [=] { TRUE | FALSE }

ACCEPTINVCHARS 子句會設定零 ETL 整合資料表是否在偵測到 VARCHAR 資料類型的無效字元時,仍繼續擷取。遇到無效字元時,無效字元會取代為預設的 ? 字元。

REFRESH_INTERVAL <interval>

REFRESH_INTERVAL 子句會設定將資料從零 ETL 來源重新整理至目標資料庫的大約時間間隔 (以秒為單位)。針對來源類型為 Aurora MySQL、Aurora PostgreSQL 或 RDS for MySQL 的零 ETL 整合,interval 可以設定為 0-432,000 秒 (5 天)。針對 Amazon DynamoDB 零 ETL 整合,interval 可以設定為 900-432,000 秒 (15 分鐘至 5 天)。

如需使用零 ETL 整合建立資料庫的詳細資訊,請參閱《Amazon Redshift 管理指南》中的在 Amazon Redshift 中建立目的地資料庫

TRUNCATECOLUMNS [=] { TRUE | FALSE }

TRUNCATECOLUMNS 子句會設定,當 VARCHAR 欄或 SUPER 欄屬性的值超出限制時,零 ETL 整合資料表是否繼續擷取。當 TRUE 時,值會截斷至符合欄長度,而溢出 JSON 屬性的值則會截斷至符合 SUPER 欄長度。

HISTORY_MODE [=] {TRUE | FALSE} [ FOR { {ALL} TABLES [IN SCHEMA schema [, ...]] | TABLE schema.table [, ...]} ]

此子句指定 Amazon Redshift 要針對所有資料表,還是參與零 ETL 整合的結構描述中的資料表設定歷史記錄模式。此選項僅適用於針對零 ETL 整合建立的資料庫。

HISTORY_MODE 子句可以設定為 TRUEFALSE。預設值為 FALSE。只有處於 Synced 狀態的資料表才能將歷史記錄模式切換為開啟和關閉。如需有關 HISTORY_MODE 的資訊,請參閱《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;

下列範例會修改名稱為 sampledb 且具有 SNAPSHOT 隔離層級的資料庫。

ALTER DATABASE sampledb ISOLATION LEVEL SNAPSHOT;

下列範例會重新整理零 ETL 整合之 sample_integration_db 中的資料表 schema1.sample_table1schema2.sample_table2 資料庫。

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_schema 中處於 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