PostgreSQLでは、IF NOT EXISTS
を使用できます CREATE TABLE
の句 作成する前に、同じ名前のテーブルがデータベースにすでに存在するかどうかを確認するステートメント。
テーブルは、同じ名前の他のテーブルが存在しない場合にのみ作成されます。その名前のテーブルがすでに存在する場合、エラーの代わりに「通知」が発行されます。
例
デモンストレーションの例を次に示します。
CREATE TABLE IF NOT EXISTS t1 (
c1 INT,
c2 VARCHAR(10)
);
ここでは、t1
はテーブル名であり、括弧内はすべてテーブル定義(つまり、列など)です。
その場合、テーブルはt1
という名前のテーブルがまだない場合にのみ作成されます。 。
テーブルが存在することを確認します
pg_tables
をクエリできます テーブルが現在存在するかどうかを確認するために表示します:
SELECT EXISTS (
SELECT FROM
pg_tables
WHERE
schemaname = 'public' AND
tablename = 't1'
);
結果:
True
この場合、True
を取得します 、これは、テーブルが存在し、私がそのテーブルにアクセスできることを意味します。
構成によっては、t
を取得する場合があります / f
True
の代わりに /False
。
テーブルをもう一度作成してみてください
そのテーブルを再度作成しようとすると:
CREATE TABLE IF NOT EXISTS t1 (
c1 INT,
c2 VARCHAR(10)
);
エラーは発生しません。通知が表示されます:
NOTICE: relation "t1" already exists, skipping
予想どおり、この通知はテーブルがすでに存在することを示しています。
IF NOT EXISTS
なし 条項
IF NOT EXISTS
を使用しない場合は次のようになります すでに存在するテーブルを作成しようとするときの句:
CREATE TABLE t1 (
c1 INT,
c2 VARCHAR(10)
);
今回はエラーが発生します:
ERROR: relation "t1" already exists
IF NOT EXISTS
に注意してください 句はテーブルの構造/定義をチェックしません。作成しているテーブルに付けようとしているのと同じ名前の既存のテーブルがないことを確認するだけです。
つまり、その名前のテーブルがすでに存在しているからといって、それが正しい定義を持っているとは限りません。
IF NOT EXISTS
機能はPostgreSQL9.1(リリースノート)で追加されました。