sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLに存在しない場合にのみテーブルを作成する方法

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


    1. MyISAMとInnoDBの違いは何ですか?

    2. プロパティファイルの例からJDBC構成をロードする方法

    3. Oracle-ADFアプリケーションをTomcat7にデプロイしようとしています

    4. 各GROUPBYグループの最初の行を選択する方法