Maison >base de données >tutoriel mysql >Comment créer des tables dans PostgreSQL sans doublons ?

Comment créer des tables dans PostgreSQL sans doublons ?

DDD
DDDoriginal
2025-01-01 01:18:10682parcourir

How to Create Tables in PostgreSQL without Duplicates?

Création de tables dans PostgreSQL sans duplication

Dans MySQL, la syntaxe "CREATE TABLE IF NOT EXISTS" permet de créer une table sans générer une erreur si elle existe déjà. Cela garantit que le script peut être exécuté plusieurs fois sans créer de tables en double. Dans PostgreSQL, cette fonctionnalité a été introduite à partir de la version 9.1.

PostgreSQL 9.1 et versions ultérieures

Pour PostgreSQL 9.1 et versions ultérieures, vous pouvez utiliser la syntaxe suivante pour créer une table :

CREATE TABLE IF NOT EXISTS myschema.mytable (i integer);

Versions PostgreSQL antérieures à 9.1

Pour les versions antérieures de PostgreSQL, il existe une solution de contournement en utilisant une fonction :

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$;

Vous pouvez ensuite appeler la fonction comme suit :

SELECT create_mytable();

Remarques :

  • Assurez-vous que votre syntaxe correspond à la sensibilité à la casse du le schéma et le nom de la table.
  • N'oubliez pas que pg_tables ne contient que des tables réelles, il est donc possible que l'identifiant soit occupé par d'autres objets.
  • Si le rôle exécutant la fonction ne dispose pas des privilèges de création de table requis , envisagez d'accorder ces privilèges à l'aide de la clause SECURITY DEFINER.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn