sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL-tabel maken als deze niet bestaat

Deze functie is geïmplementeerd in Postgres 9.1 :

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

Voor oudere versies , hier is een functie om er omheen te werken:

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$;

Bel:

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

Opmerkingen:

  • De kolommen schemaname en tablename in pg_tables Zijn hoofdlettergevoelig. Als u dubbele aanhalingstekens maakt in de CREATE TABLE verklaring, moet u exact dezelfde spelling gebruiken. Als u dat niet doet, moet u tekenreeksen in kleine letters gebruiken. Zie:

  • Zijn PostgreSQL-kolomnamen hoofdlettergevoelig?

  • pg_tables bevat alleen daadwerkelijke tabellen . De identifier kan nog steeds worden ingenomen door gerelateerde objecten. Zie:

  • Hoe te controleren of een tabel in een bepaald schema bestaat

  • Als de rol uitvoert deze functie heeft niet de benodigde rechten om de tabel te maken die u misschien wilt gebruiken SECURITY DEFINER voor de functie en maak het eigendom door een andere rol met de nodige privileges. Deze versie is veilig genoeg.



  1. Leer hoe u de CASE-instructie in SQL kunt gebruiken

  2. Hoe maak je een Datetime Format in SQLite

  3. Hoe Sind() werkt in PostgreSQL

  4. Bindende variabele aan tabelnaam met cx_Oracle