このページでは、テーブルの名前変更方法と、テーブルの同義語の追加、使用、削除方法について説明します。
テーブルの名前変更と類義語のオプション
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;