Deze functie is geïmplementeerd in Postgres 9.1 :
CREATE TABLE IF NOT EXISTS myschema.mytable (i integer);
Voor oudere versies , hier is een functie om er omheen te werken:
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$;
Bel:
SELECT create_mytable(); -- call as many times as you want.
Opmerkingen:
-
De kolommen
schemaname
entablename
inpg_tables
Zijn hoofdlettergevoelig. Als u dubbele aanhalingstekens maakt in deCREATE TABLE
verklaring, moet u exact dezelfde spelling gebruiken. Als u dat niet doet, moet u tekenreeksen in kleine letters gebruiken. Zie: -
Zijn PostgreSQL-kolomnamen hoofdlettergevoelig?
-
pg_tables
bevat alleen daadwerkelijke tabellen . De identifier kan nog steeds worden ingenomen door gerelateerde objecten. Zie: -
Hoe te controleren of een tabel in een bepaald schema bestaat
-
Als de rol uitvoert deze functie heeft niet de benodigde rechten om de tabel te maken die u misschien wilt gebruiken
SECURITY DEFINER
voor de functie en maak het eigendom door een andere rol met de nodige privileges. Deze versie is veilig genoeg.