管理資料表名稱

本頁面說明如何在 GoogleSQL 方言資料庫和 PostgreSQL 方言資料庫中,重新命名資料表,以及如何新增、使用及刪除資料表同義詞。

資料表重新命名和同義詞選項

您可以使用 ALTER TABLE 陳述式執行下列操作:

使用同義字重新命名資料表的運作方式

常見的情況是重新命名資料表,並新增含有舊資料表名稱的同義字。重新命名資料表後,您可以更新應用程式,讓日程表使用新名稱。在此期間,部分應用程式可能會使用舊名稱,其他應用程式則會使用新名稱。

更新所有應用程式以使用新名稱後,建議您移除同義字。雖然同義字不會影響成效,但在同義字刪除前,您無法在其他地方使用舊名稱。

同義字會以 synonym 物件形式儲存在結構定義中。一個資料表只能有一個同義字。

詳情請參閱「重新命名資料表並新增同義字」。

資料表名稱交換的運作方式

當您需要在兩個資料表之間交換名稱時,可以將 RENAME TO 陳述式連結在一起,在同一陳述式中重新命名兩個資料表。這樣一來,您就能連結應用程式至其他資料表,而不會中斷連線。

詳情請參閱「交換資料表名稱」。

資料表重新命名的運作方式

重新命名資料表時,Spanner 會變更資料表結構定義中的資料表名稱。重新命名資料表時,會將所有子項資料表與新資料表名稱交錯排列。重新命名資料表也會變更下列項目的資料表參照:

  • 索引
  • 外鍵
  • 變更串流
  • 精細的存取權控管機制 (FGAC)

Spanner 不會自動更新檢視畫面,以便使用新的資料表名稱。

詳情請參閱「重新命名資料表」。

資料表重新命名限制

資料表重新命名有下列限制:

  • 如果資料表與另一個資料表交錯,您就無法將資料表重新命名為該資料表中資料欄的名稱。
  • 您無法重新命名索引。如要變更索引名稱,請先捨棄索引,然後使用新名稱重新建立索引。
  • 如果資料表含有檢視畫面,您可能需要先放棄檢視畫面,再重新命名資料表。

同義詞的運作方式

您可以建立含有同義詞的新資料表,或是變更資料表以新增同義詞,而無須重新命名資料表。您可能會在下列情況下使用這項功能:您想在實際工作環境和測試環境中使用資料庫。

詳情請參閱「在資料表中新增同義字」。

權限

如要重新命名資料表或為資料表新增同義字,您必須具備 spanner.databases.updateDdl 權限。如要檢查或編輯權限,請參閱「授予原則權限」。

重新命名資料表並新增同義字

GoogleSQL

使用 ALTER TABLE RENAME TO ADD SYNONYM 重新命名資料表並新增同義字。

  ALTER TABLE table_name RENAME TO new_table_name, ADD SYNONYM table_name;

PostgreSQL

使用 ALTER TABLE RENAME WITH ADD SYNONYM 重新命名資料表並新增同義字。

  ALTER TABLE table_name RENAME WITH SYNONYM TO new_table_name;

以下範例說明如何重新命名資料表並新增同義字。舉例來說,假設您使用下列 DDL 建立資料表:

GoogleSQL

  CREATE TABLE Singers (
      SingerId INT64 NOT NULL,
      SingerName STRING(1024)
  ), PRIMARY KEY (SingerId);

PostgreSQL

  CREATE TABLE singers (
      singer_id BIGINT,
      singer_name VARCHAR(1024),
      PRIMARY KEY (singer_id));

您可以發出以下 DDL 要求,將資料表重新命名,並將現有名稱移至 synonym 物件。

GoogleSQL

  ALTER TABLE Singers RENAME TO SingersNew, ADD SYNONYM Singers;

PostgreSQL

  ALTER TABLE singers RENAME WITH SYNONYM TO singers_new;

交換資料表名稱

下列 DDL 陳述式會以原子方式變更多個資料表的名稱。這項功能可用於在一個或多個資料表之間交換名稱。

GoogleSQL

請使用 RENAME TABLE

  RENAME TABLE old_name1 TO new_name1 [,old_name2 TO new_name2 ...];

PostgreSQL

請使用 ALTER TABLE RENAME TO

  ALTER TABLE [ IF EXISTS ] [ ONLY ] table_name1
        RENAME TO new_table_name1
        [, ALTER TABLE [ IF EXISTS ] [ ONLY ] table_name2
              RENAME TO new_table_name2 ...];

以下範例說明如何交換兩個資料表的名稱。這項操作需要將第一個資料表重新命名為臨時名稱,將第二個資料表重新命名為第一個資料表的名稱,然後將第一個資料表重新命名為第二個資料表的名稱。

如果您已建立兩個資料表,如下所示:

GoogleSQL

  CREATE TABLE Singers (
        SingerId INT64 NOT NULL,
        SingerName STRING(1024)
        ), PRIMARY KEY (SingerId);

  CREATE TABLE SingersNew (
        SingerId INT64 NOT NULL,
        FirstName STRING(1024),
        MiddleName STRING(1024),
        LastName STRING(1024)
        ), PRIMARY KEY (SingerId);

PostgreSQL

  CREATE TABLE singers (
        singer_id BIGINT,
        singer_name VARCHAR(1024),
        PRIMARY KEY (singer_id)
        );

  CREATE TABLE singers_new (
        singer_id BIGINT,
        first_name VARCHAR(1024),
        middle_name VARCHAR(1024),
        last_name VARCHAR(1024)
        PRIMARY KEY (singer_id)
        );

您可以使用下列 DDL 要求來交換資料表名稱:

GoogleSQL

  RENAME TABLE Singers TO Temp, SingersNew TO Singers, Temp TO SingersNew;

PostgreSQL

  ALTER TABLE singers RENAME TO temp,
        ALTER TABLE singers_new RENAME TO singers,
        ALTER TABLE temp RENAME TO singers_new;

套用 DDL 陳述式後,系統會交換資料表名稱,如下所示:

GoogleSQL

  CREATE TABLE Singers (
        SingerId INT64 NOT NULL,
        FirstName STRING(1024),
        MiddleName STRING(1024),
        LastName STRING(1024)
        ), PRIMARY KEY (SingerId);

  CREATE TABLE SingersNew (
        SingerId INT64 NOT NULL,
        SingerName STRING(1024)
        ), PRIMARY KEY (SingerId);

PostgreSQL

  CREATE TABLE singers (
        singer_id BIGINT,
        first_name VARCHAR(1024),
        middle_name VARCHAR(1024),
        last_name VARCHAR(1024)
        PRIMARY KEY (singer_id)
        );

  CREATE TABLE singers_new (
        singer_id BIGINT,
        singer_name VARCHAR(1024),
        PRIMARY KEY (singer_id)
        );

重新命名資料表

如要重新命名資料表,請使用下列語法:

GoogleSQL

使用 ALTER NAMERENAME TABLE 陳述式。

  ALTER TABLE table_name RENAME TO new_table_name;
  RENAME TABLE table_name TO new_table_name;

PostgreSQL

使用 ALTER TABLE RENAME TO 陳述式。

  ALTER TABLE [ IF EXISTS ] [ ONLY ] table_name
        RENAME TO new_table_name;

以下範例顯示了會重新命名資料表的 DDL 要求:

GoogleSQL

  RENAME TABLE Singers TO SingersNew;

PostgreSQL

  ALTER TABLE singers RENAME TO singers_new;

在表格中新增同義詞

如要在表格中新增同義字:

GoogleSQL

  ALTER TABLE table_name ADD SYNONYM synonym;

PostgreSQL

  ALTER TABLE [ IF EXISTS ] [ ONLY ] table_name ADD SYNONYM synonym;

以下範例顯示 DDL 要求,可將同義字新增至資料表:

GoogleSQL

  ALTER TABLE Singers ADD SYNONYM SingersTest;

PostgreSQL

  ALTER TABLE singers ADD SYNONYM singers_test;

建立含有同義詞的資料表

如要建立含有同義詞的資料表,請按照下列步驟操作:

GoogleSQL

請使用 CREATE TABLE SYNONYM synonym_name

  CREATE TABLE table_name (
      ...
      SYNONYM (synonym)
  ) PRIMARY KEY (primary_key);

PostgreSQL

請使用 CREATE TABLE SYNONYM synonym_name

  CREATE TABLE table_name (
      ...
      SYNONYM (synonym),
      PRIMARY KEY (primary_key));

以下範例會建立資料表並新增同義字。

GoogleSQL

  # The table's name is Singers and the synonym is Artists.
  CREATE TABLE Singers (
      SingerId INT64 NOT NULL,
      SingerName STRING(1024),
      SYNONYM (Artists)
  ) PRIMARY KEY (SingerId);

PostgreSQL

  # The table's name is singers and the synonym is artists.
  CREATE TABLE singers (
      singer_id BIGINT,
      singer_name VARCHAR(1024),
      SYNONYM (artists),
      PRIMARY KEY (singer_id));

從資料表中移除同義字

GoogleSQL

使用 ALTER TABLE DROP SYNONYM 從資料表中移除同義字。

  ALTER TABLE table_name DROP SYNONYM synonym;

PostgreSQL

使用 ALTER TABLE DROP SYNONYM 從資料表中移除同義字。

  ALTER TABLE [ IF EXISTS ] [ ONLY ] table_name DROP SYNONYM synonym;

以下範例顯示 DDL 要求,可從資料表中刪除同義字:

GoogleSQL

  ALTER TABLE Singers DROP SYNONYM SingersTest;

PostgreSQL

  ALTER TABLE singers DROP SYNONYM singers_test;