PostgreSQL のスキーマ内のテーブルの名前を変更する

Bilal Shahid 2023年6月20日
PostgreSQL のスキーマ内のテーブルの名前を変更する

PostgreSQL では、しばしば CREATE テーブルを使用してデータを保存します。 次のようなテーブルを CREATE すると:

create table cat (
    ID int,
    NAME text
)

テーブルを作成したときに、すでに NAME をテーブルに割り当てています。 上記の例では、テーブルに CAT という名前を付けました。これが修正されると、テーブルが作成されたら、おそらく別の手段を使用してテーブルを RENAME する必要があります。

CREATING テーブルの構文は次のようになります。

CREATE TABLE [Table_name] (
     [variable_names] [variable_types]
)

スキーマとは何ですか? SCHEMA には、テーブル、ビュー、インデックス、および場合によっては DBMS 内に含めることができるすべてのデータベース オブジェクトが含まれます。

それでは、テーブルが作成されたら、SCHEMA 内でテーブルを RENAME する方法を学びましょう。

PostgreSQL の基本的な名前変更構文

PostgreSQL で既に作成されているテーブルの名前を変更するには、PostgreSQL スキーマ内で既に作成されているオブジェクトを変更または変更する傾向がある ALTER ステートメントを使用できます。 テーブルを RENAME する傾向がある ALTER ステートメントは、構文を使用します。

ALTER TABLE [ IF EXISTS ] name
    RENAME TO new_name

チュートリアルで何度か使用する CAT テーブルの例を見てみましょう。 データベースで SELECT 操作を行うと、次のような結果が返されます。

Select * from information_schema.tables
where table_name = 'cat'

出力:

"postgres'        "public"    "cat"        "BASE TABLE"

次に、次のように、このテーブルに対して RENAMING 操作を実行できます。

alter table CAT rename to KITTEN

そして今、データベースで CAT を検索すると、空の結果が返されます。 ただし、KITTEN を検索すると、CAT テーブルと同じ値で完全に機能します。

"postgres"	"public"	"kitten"	"BASE TABLE"

したがって、ALTER 関数を使用した基本的な RENAME は完全に機能します。 何かを使用して、PSQL でこれと同じクエリを実行できます。

ALTER TABLE cat rename to Kitten;

成功すると、次のような出力が返されます。

出力:

テーブルを変更

PostgreSQL の特定の SCHEMA テーブルの RENAMING 中のエラー

構文エラーは、現在存在するテーブルとは異なる SCHEMA 内に作成されたテーブルに対して RENAME 操作を実行する際に発生する最も一般的なエラーの 1つです。

たとえば、次のように SCHEMA を作成する傾向がある場合:

CREATE SCHEMA tester;

そして、その中にテーブルを作ります。

CREATE TABLE tester.dog (
   id INT,
   name TEXT
)

テーブルは、指定された SCHEMA 内に存在するようになりました。 ただし、次の方法で RENAME 操作を呼び出すと、エラーが返されます。

ALTER TABLE tester.dog RENAME TO tester.doggy

出力:

ERROR:  syntax error at or near "."
LINE 1: ALTER TABLE tester.dog RENAME TO tester.doggy

なぜ? RENAME のテキストを見ると、次のように書かれています。

ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ]
    RENAME [ COLUMN ] column_name TO new_column_name

new_column_name は有効な STRING でなければなりません。 そのため、. などの他の文字は使用できません。 および , は、STRING を無効にする可能性があります。

したがって、先に進んで次のようにするとします。

alter table tester.dog rename to doggy;

それは完全にうまくいきます。 さて、DOMAIN.DOG テーブルを見ると、RENAMED から DOMAIN.DOGGY になっているはずです。

これを達成する別の方法は、テーブルを上記のように RENAME する傾向がある回避策を使用することです。 現在 SCHEMA を使用しているため、. の使用中にエラーが発生する可能性があります。 SCHEMA 内のテーブルを指定する表記法。

次に、SEARCH PATHS について学習します。

PostgreSQL の RENAMING SCHEMA TABLES のための SEARCH PATHS

SEARCH PATHSは、現在参照されているSCHEMAの参照をSEARCH PATH構文で定義されたものに変更する傾向があるため、グローバルに定義されています。 次のような構文を使用します。

search_path (string)

CLIENT CONNECTION DEFAULTSの下で定義されています。 次のクエリを実行して、TABLERENAME します。

SET search_path to tester;
alter table doggy rename to dogie

DOMAIN スキーマへの search_pathSETS し、テーブル DOGI を呼び出すと、テーブルが DOMAIN スキーマから参照されていることを自動的に認識します。

したがって、この 1 行のクエリは、DOMAIN.TABLE_NAME を呼び出すよりも、SCHEMA 内のテーブルを参照する方がはるかに優れています。

SEARCH_PATH はカンマで区切られた複数の SCHEMA 名を持つこともでき、 TABLE または OBJECT を呼び出すと、これらの定義された SCHEMA のそれぞれからチェックされます。

IF EXISTS 句を追加して、参照されている TABLE または OBJECT が存在するかどうかを確認してから実行することもできます。

さまざまなオプションとシナリオを使用して、PostgreSQL でテーブルを RENAME する方法を学んだことを願っています。 多くの場合、RENAME ステートメントのさまざまなバリエーションが機能することに注意してください。

データベースで作業するときは、どの SCHEMA が参照されているか、どの OBJECT が呼び出されているか、エラーを防止および回避するために必要な場所を把握してください。 私たちのソリューションが、テーブルを RENAMED するさまざまな方法を理解するのに役立つことを願っています。

著者: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub

関連記事 - PostgreSQL Table