PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment créer une table uniquement si elle n'existe pas dans PostgreSQL

Dans PostgreSQL, vous pouvez utiliser le IF NOT EXISTS clause de la CREATE TABLE pour vérifier si oui ou non une table du même nom existe déjà dans la base de données avant de la créer.

La table ne sera créée que si aucune autre table n'existe avec le même nom. Si une table existe déjà avec ce nom, un "avis" sera émis au lieu d'une erreur.

Exemple

Voici un exemple pour illustrer :

CREATE TABLE IF NOT EXISTS t1 (
  c1 INT,
  c2 VARCHAR(10)
);

Ici, t1 est le nom de la table, et tout ce qui est entre parenthèses est la définition de la table (c'est-à-dire les colonnes, etc.).

Dans ce cas, la table ne sera créée que s'il n'y en a pas déjà une appelée t1 .

Vérifiez que la table existe maintenant

Nous pouvons interroger les pg_tables view pour vérifier si la table existe maintenant :

SELECT EXISTS (
    SELECT FROM 
        pg_tables
    WHERE 
        schemaname = 'public' AND 
        tablename  = 't1'
    );

Résultat :

True

Dans ce cas, j'obtiens True , ce qui signifie que la table existe et que j'y ai accès.

Selon votre configuration, vous pouvez obtenir t /f au lieu de True /False .

Essayez de recréer le tableau

Si nous tentons de recréer cette table :

CREATE TABLE IF NOT EXISTS t1 (
  c1 INT,
  c2 VARCHAR(10)
);

Nous n'obtenons pas d'erreur, nous recevons un avis :

NOTICE:  relation "t1" already exists, skipping

Comme prévu, la notice nous indique que la table existe déjà.

Sans le IF NOT EXISTS Article

Voici ce qui se passe lorsque nous n'utilisons pas le IF NOT EXISTS clause lors de la tentative de création d'une table qui existe déjà :

CREATE TABLE t1 (
  c1 INT,
  c2 VARCHAR(10)
);

Cette fois, nous obtenons une erreur :

ERROR:  relation "t1" already exists

Notez que le IF NOT EXISTS La clause ne vérifie pas la structure/définition de la table. Il vérifie simplement qu'il n'y a pas de table existante avec le même nom que nous essayons de donner à la table que nous créons.

En d'autres termes, ce n'est pas parce qu'une table de ce nom existe déjà qu'elle a la bonne définition.

Le IF NOT EXISTS la fonctionnalité a été ajoutée dans PostgreSQL 9.1 (notes de version).