テーブル名を管理する

このページでは、テーブルの名前変更方法と、テーブルの同義語の追加、使用、削除方法について説明します。

テーブルの名前変更と類義語のオプション

ALTER TABLE ステートメントを使用すると、次のことができます。

類義語を使用したテーブル名の変更の仕組み

一般的なシナリオは、テーブルの名前を変更し、古いテーブル名を含む類義語を追加することです。テーブルの名前を変更したら、スケジュールで新しい名前を使用するようにアプリケーションを更新できます。この期間中、一部のアプリでは古い名前が使用され、他のアプリでは新しい名前が使用される可能性があります。

新しい名前を使用するようにすべてのアプリケーションを更新したら、類義語を削除することをおすすめします。類義語を使用してもパフォーマンスに影響しませんが、類義語が削除されるまで古い名前を使用することはできません。

類義語は、スキーマに synonym オブジェクトとして保存されます。テーブルには類義語を 1 つだけ含めることができます。

詳細については、テーブルの名前を変更して類義語を追加するをご覧ください。

テーブル名の入れ替えの仕組み

2 つのテーブルの名前を交換する必要がある場合は、RENAME TO ステートメントを連結して、同じステートメントで 2 つのテーブルの名前を変更できます。これにより、アプリケーションを中断することなく別のテーブルにリンクできます。

詳細については、テーブル名を入れ替えるをご覧ください。

テーブル名の変更の仕組み

テーブルの名前を変更すると、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 ステートメントは、複数のテーブルの名前をアトミックに変更します。これは、1 つ以上のテーブルペア間で名前を交換する場合に便利です。

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

次の例は、2 つのテーブルの名前を入れ替える方法を示しています。この場合、最初のテーブルは一時的な名前に、2 番目のテーブルは最初のテーブルの名前に変更され、その後、最初のテーブルは 2 番目のテーブルの名前に変更されます。

次のように 2 つのテーブルを作成したとします。

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 NAME ステートメントまたは RENAME 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;