sql >> Database teknologi >  >> RDS >> PostgreSQL

PostgreSQL opret tabel, hvis den ikke eksisterer

Denne funktion er blevet implementeret i Postgres 9.1 :

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

Til ældre versioner , her er en funktion til at omgå det:

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

Ring til:

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

Bemærkninger:

  • Kolonnerne schemaname og tablename i pg_tables er store og små bogstaver. Hvis du dobbeltciterer identifikatorer i CREATE TABLE udsagn, skal du bruge nøjagtig samme stavemåde. Hvis du ikke gør det, skal du bruge strenge med små bogstaver. Se:

  • Er PostgreSQL-kolonnenavne skelne mellem store og små bogstaver?

  • pg_tables indeholder kun faktiske tabeller . Identifikationen kan stadig være optaget af relaterede objekter. Se:

  • Sådan kontrolleres om en tabel findes i et givet skema

  • Hvis rollen udfører denne funktion har ikke de nødvendige rettigheder til at oprette den tabel, du måske vil bruge SECURITY DEFINER for funktionen og gør den ejet af en anden rolle med de nødvendige privilegier. Denne version er sikker nok.



  1. SQL DELETE-syntaks – Listet efter DBMS

  2. SQL opdelt kommasepareret række

  3. Brug af isql med en forbindelsesstreng

  4. PostgreSQL:Den alsidige INSERT