sql >> Databáze >  >> RDS >> PostgreSQL

PostgreSQL vytvořit tabulku, pokud neexistuje

Tato funkce byla implementována v Postgres 9.1 :

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

Pro starší verze , zde je funkce, jak to obejít:

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

Volejte:

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

Poznámky:

  • Sloupce schemaname a tablename v pg_tables rozlišují velká a malá písmena. Pokud v CREATE TABLE uvedete identifikátory do dvojitých uvozovek prohlášení, musíte použít přesně stejný pravopis. Pokud ne, musíte použít řetězce s malými písmeny. Viz:

  • Rozlišují názvy sloupců PostgreSQL velká a malá písmena?

  • pg_tables obsahuje pouze skutečné tabulky . Identifikátor může být stále obsazen souvisejícími objekty. Viz:

  • Jak zkontrolovat, zda v daném schématu existuje tabulka

  • Pokud se role provádí tato funkce nemá potřebná oprávnění k vytvoření tabulky, kterou byste mohli chtít použít SECURITY DEFINER pro funkci a učinit ji vlastníkem jinou rolí s potřebnými právy. Tato verze je dostatečně bezpečná.



  1. Snímky databáze SQL Server -3

  2. 3 způsoby, jak odstranit duplicitní řádky na serveru SQL při ignorování primárního klíče

  3. Ekvivalent unpivot() v PostgreSQL

  4. Požadavek se nezdařil se stavem HTTP 401:Neautorizováno v SSRS