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
schemanameentablenameinpg_tablesZijn hoofdlettergevoelig. Als u dubbele aanhalingstekens maakt in deCREATE TABLEverklaring, moet u exact dezelfde spelling gebruiken. Als u dat niet doet, moet u tekenreeksen in kleine letters gebruiken. Zie: -
Zijn PostgreSQL-kolomnamen hoofdlettergevoelig?
-
pg_tablesbevat 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 DEFINERvoor de functie en maak het eigendom door een andere rol met de nodige privileges. Deze versie is veilig genoeg.