sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL skapa tabell om den inte finns

Den här funktionen har implementerats i Postgres 9.1 :

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

För äldre versioner , här är en funktion för att komma runt 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:

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

Anmärkningar:

  • Kolumnerna schemaname och tablename i pg_tables är skiftlägeskänsliga. Om du dubbelciterar identifierare i CREATE TABLE påstående måste du använda exakt samma stavning. Om du inte gör det måste du använda strängar med små bokstäver. Se:

  • Är PostgreSQL-kolumnnamn skiftlägeskänsliga?

  • pg_tables innehåller bara faktiska tabeller . Identifieraren kan fortfarande vara upptagen av relaterade objekt. Se:

  • Hur man kontrollerar om en tabell finns i ett givet schema

  • Om rollen kör den här funktionen har inte de nödvändiga rättigheterna för att skapa tabellen som du kanske vill använda SECURITY DEFINER för funktionen och gör den ägd av en annan roll med nödvändiga privilegier. Den här versionen är tillräckligt säker.



  1. Hur man skapar en blogg i PHP och MySQL databas - DB design

  2. Värden 'xxx.xx.xxx.xxx' får inte ansluta till denna MySQL-server

  3. Hur man får första raden per grupp i PostgreSQL

  4. Infoga array i MySQL-databas med PHP