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

Dans Postgresql, comment puis-je créer une table uniquement si elle n’existe pas déjà?

Exemple de code apprécié.

Je ne suis pas sûr quand il a été ajouté, mais pour être complet, je voudrais souligner 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 créera une table nommée vip dans les users du schéma si la table n’existe pas.

La source

 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(); 

Créez simplement la table et ne vous inquiétez pas de son existence. S’il n’existe pas, il sera créé; s’il 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 lors de l’exécution de l’instruction create.

Je pense que pour vérifier la table pg_class peut-être vous aider, quelque chose comme ça:

 SELECT COUNT (relname) as a FROM pg_class WHERE relname = 'mytable' if a = 0 then (CREATE IT) 

Cordialement.

C’est une vieille question. Je ne fais que ramener à suggérer une autre réponse. Note: d’ autres meilleures réponses existent déjà, c’est juste à des fins éducatives .

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

Une autre solution consiste à interroger la table système pour connaître son existence et à partir de là.

 SELECT true FROM pg_tables WHERE tablename =  [AND schemaname = ];

Utilisé:

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

Si elle correspond, vous aurez une vraie valeur, sinon elle devrait renvoyer un dataset vide. Vous pouvez utiliser cette valeur pour déterminer si vous devez effectuer une CREATE TABLE.

La meilleure réponse a été donnée par Skalli si vous utilisez Postgresql 9.1+.

Si comme moi vous devez le faire avec Postgresql 8.4, vous pouvez utiliser une fonction avec une exception “duplicate_table”.

Cela ignorera l’erreur générée lorsque la table existe et continuera à générer d’autres erreurs.

Voici un exemple de travail sur Postgresql 8.4.10:

 CREATE FUNCTION create_table() RETURNS VOID AS $$ BEGIN CREATE TABLE my_table_name(my_column INT); EXCEPTION WHEN duplicate_table THEN -- Do nothing END; $$ LANGUAGE plpgsql; 

Ce que j’ai utilisé pour vérifier si une table existe (Java et PostgreSQL) avant de la créer. J’espère que ça aidera quelqu’un. La partie créer une table n’est pas implémentée ici, juste la vérification pour voir si une table existe déjà. Transmettez une connexion à la firebase database et à la tableName et elle doit indiquer si la table existe ou non.

 public boolean SQLTableExists(Connection connection, Ssortingng tableName) { boolean exists = false; try { Statement stmt = connection.createStatement(); Ssortingng sqlText = "SELECT tables.table_name FROM information_schema.tables WHERE table_name = '" + tableName + "'"; ResultSet rs = stmt.executeQuery(sqlText); if (rs != null) { while (rs.next()) { if (rs.getSsortingng(1).equalsIgnoreCase(tableName)) { System.out.println("Table: " + tableName + " already exists!"); exists = true; } else { System.out.println("Table: " + tableName + " does not appear to exist."); exists = false; } } } } catch (SQLException sqlex) { sqlex.printStackTrace(); } return exists; } 

La réponse la plus simple est:

 catch{ #create table here } 

Cela crée une table si elle n’existe pas et génère une erreur si elle existe. Et l’erreur est interceptée.

http://www.postgresql.org/docs/8.2/static/sql-droptable.html

 DROP TABLE [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ] 

Essayez d’exécuter une requête sur la table. S’il lève une exception, attrapez l’exception et créez une nouvelle table.

 try { int a = db.queryForInt("SELECT COUNT(*) FROM USERS;"); } catch (Exception e) { System.out.print(e.toSsortingng()); db.update("CREATE TABLE USERS (" + "id SERIAL," + "PRIMARY KEY(id)," + "name varchar(30) NOT NULL," + "email varchar(30) NOT NULL," + "username varchar(30) NOT NULL," + "password varchar(30) NOT NULL" + ");"); } return db;