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(リリースノート)で追加されました。