42 votes

Postgresql : comment créer une table uniquement si elle n'existe pas déjà ?

Dans Postgresql, comment puis-je faire une condition pour créer une table seulement si elle n'existe pas déjà ?

Un exemple de code serait apprécié.

81voto

Skalli Points 1117

Je ne suis pas sûr de la date à laquelle il a été ajouté, mais par souci d'exhaustivité, je tiens à signaler que dans la version 9.1 (peut-être avant) IF NOT EXISTS peut être utilisé. IF NOT EXISTS ne créera la table que si elle n'existe pas déjà.

Exemple :

CREATE TABLE IF NOT EXISTS users.vip
(
  id integer
)

Cela va créer une table nommée vip dans le schéma users si la table n'existe pas.

Source :

21voto

Michael Buen Points 20453
create or replace function update_the_db() returns void as
$$
begin

    if not exists(select * from information_schema.tables 
        where 
            table_catalog = CURRENT_CATALOG and table_schema = CURRENT_SCHEMA
            and table_name = 'your_table_name_here') then

        create table your_table_name_here
        (
            the_id int not null,
            name text
        );

    end if;

end;
$$
language 'plpgsql';

select update_the_db();
drop function update_the_db();

13voto

Jared Points 23711

Créez simplement la table et ne vous souciez pas de savoir si elle existe. Si elle n'existe pas, elle sera créée ; si elle existe, la table ne sera pas modifiée. Vous pouvez toujours vérifier la valeur de retour de votre requête SQL pour voir si la table existait ou non lorsque vous avez exécuté l'instruction create.

10voto

Je pense que vérifier la table pg_class pourrait vous aider, quelque chose comme ça :

SELECT COUNT (relname) as a FROM pg_class WHERE relname = 'mytable'

if a = 0 then (CREATE IT)

Regards.

6voto

vol7ron Points 11270

Il s'agit d'une vieille question. Je ne la ramène que pour suggérer une autre réponse. Note : d'autres meilleures réponses existent déjà, ceci est juste à des fins pédagogiques .

Le plus simple est de faire ce que d'autres ont dit ; exécutez le CREATE TABLE si vous voulez conserver les données existantes, ou exécutez un DROP IF EXISTS et ensuite un CREATE TABLE, si vous voulez une table fraîchement créée.

Une autre alternative consiste à demander à la table système de vérifier son existence et de procéder à partir de là.

SELECT true FROM pg_tables WHERE tablename = <table> [AND schemaname = <schema>];

En cours d'utilisation :

-- schema independent:
SELECT true FROM pg_tables WHERE tablename = 'foo';

-- schema dependent:
SELECT true FROM pg_tables WHERE tablename = 'foo' AND schemaname = 'bar';

S'il y a une correspondance, vous aurez une valeur vraie, sinon il devrait retourner un ensemble de données vide. Vous pouvez utiliser cette valeur pour déterminer si vous devez effectuer une CREATE TABLE.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X