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

PostgreSQLが存在しない場合はテーブルを作成します

    この機能はPostgres9.1で実装されています :

    CREATE TABLE IF NOT EXISTS myschema.mytable (i integer);
    

    古いバージョンの場合 、これを回避する関数は次のとおりです:

    CREATE OR REPLACE FUNCTION create_mytable()
      RETURNS void
      LANGUAGE plpgsql AS
    $func$
    BEGIN
       IF EXISTS (SELECT FROM pg_catalog.pg_tables 
                  WHERE  schemaname = 'myschema'
                  AND    tablename  = 'mytable') THEN
          RAISE NOTICE 'Table myschema.mytable already exists.';
       ELSE
          CREATE TABLE myschema.mytable (i integer);
       END IF;
    END
    $func$;
    

    電話:

    SELECT create_mytable();        -- call as many times as you want. 
    

    注:

    • schemaname およびtablename pg_tablesで 大文字と小文字が区別されます。 CREATE TABLEで識別子を二重引用符で囲む場合 ステートメントでは、まったく同じスペルを使用する必要があります。そうでない場合は、小文字の文字列を使用する必要があります。参照:

    • PostgreSQLの列名では大文字と小文字が区別されますか?

    • pg_tables 実際のテーブルのみが含まれています 。識別子は、関連するオブジェクトによって占有されている可能性があります。参照:

    • 特定のスキーマにテーブルが存在するかどうかを確認する方法

    • 役割が実行中の場合 この関数には、SECURITY DEFINERを使用する可能性のあるテーブルを作成するために必要な権限がありません。 関数のために、それを所有にします 必要な特権を持つ別の役割によって。このバージョンは十分に安全です。



    1. MySQLは1行のみを返します

    2. PostgreSQL:クエリには結果データの宛先がありません

    3. SQLServerにテーブルが存在するかどうかを確認します

    4. .NETのOraOLEDBプロバイダーはCLOBフィールドに依存しませんか?