Ta funkcja została zaimplementowana w Postgres 9.1 :
CREATE TABLE IF NOT EXISTS myschema.mytable (i integer);
Dla starszych wersji , oto funkcja do obejścia tego:
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$;
Zadzwoń:
SELECT create_mytable(); -- call as many times as you want.
Uwagi:
-
Kolumny
schemaname
itablename
wpg_tables
rozróżniana jest wielkość liter. Jeśli umieścisz identyfikatory w cudzysłowie wCREATE TABLE
oświadczenie, musisz użyć dokładnie tej samej pisowni. Jeśli nie, musisz użyć ciągów pisanych małymi literami. Zobacz: -
Czy w nazwach kolumn PostgreSQL jest rozróżniana wielkość liter?
-
pg_tables
zawiera tylko rzeczywiste tabele . Identyfikator może nadal być zajęty przez powiązane obiekty. Zobacz: -
Jak sprawdzić, czy tabela istnieje w danym schemacie
-
Jeśli rola wykonuje ta funkcja nie ma niezbędnych uprawnień do tworzenia tabeli, której możesz chcieć użyć
SECURITY DEFINER
dla funkcji i uczynić ją właścicielem przez inną rolę z niezbędnymi uprawnieniami. Ta wersja jest wystarczająco bezpieczna.