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
ogtablename
ipg_tables
er store og små bogstaver. Hvis du dobbeltciterer identifikatorer iCREATE 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.