Тази функция е внедрена в Postgres 9.1 :
CREATE TABLE IF NOT EXISTS myschema.mytable (i integer);
За по-стари версии , ето функция за заобикаляне:
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$;
Обадете се:
SELECT create_mytable(); -- call as many times as you want.
Бележки:
-
Колоните
schemaname
иtablename
вpg_tables
са чувствителни към главни букви. Ако цитирате идентификатори в двойни кавички вCREATE TABLE
изявление, трябва да използвате точно същия правопис. Ако не го направите, трябва да използвате низове с малки букви. Вижте: -
Имената на колоните в PostgreSQL са чувствителни към главни букви?
-
pg_tables
съдържа само действителни таблици . Идентификаторът все още може да бъде зает от свързани обекти. Вижте: -
Как да проверите дали таблица съществува в дадена схема
-
Ако ролята изпълни тази функция няма необходимите привилегии за създаване на таблицата, която може да искате да използвате
SECURITY DEFINER
за функцията и я направете собствена от друга роля с необходимите привилегии. Тази версия е достатъчно безопасна.