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
atablename
vpg_tables
rozlišují velká a malá písmena. Pokud vCREATE 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á.