PostgreSQL テーブルが存在しない場合は作成する 質問する

PostgreSQL テーブルが存在しない場合は作成する 質問する

MySQL スクリプトでは次のように記述できます。

CREATE TABLE IF NOT EXISTS foo ...;

... 他のもの ...

その後、テーブルを再作成せずにスクリプトを何度でも実行できます。

PostgreSQL でこれをどうやって行うのでしょうか?

ベストアンサー1

この機能はPostgres 9.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. 

ノート

schemanametablenameでは大文字とpg_tables小文字が区別されます。ステートメント内で識別子を二重引用符で囲む場合はCREATE TABLE、正確に同じスペルを使用する必要があります。そうしない場合は、小文字の文字列を使用する必要があります。参照:

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

この関数を実行するロールにテーブルを作成するために必要な権限がない場合は、SECURITY DEFINER関数を作成し、必要な権限を持つ別のロールがその関数を所有するようにします。このバージョンは十分に安全です。

おすすめ記事