Maison > base de données > tutoriel mysql > Comment puis-je créer en toute sécurité des tables PostgreSQL sans erreurs de table en double ?

Comment puis-je créer en toute sécurité des tables PostgreSQL sans erreurs de table en double ?

Patricia Arquette
Libérer: 2025-01-02 19:57:40
original
267 Les gens l'ont consulté

How Can I Safely Create PostgreSQL Tables Without Duplicate Table Errors?

PostgreSQL : Gestion de la création de table avec "CREATE TABLE IF NOT EXISTS"

Dans PostgreSQL, l'utilisation de "CREATE TABLE IF NOT EXISTS" permet la création de tables sans risque de création de tables en double. Cette fonctionnalité a été introduite dans PostgreSQL 9.1 et facilite la création de tables de manière à garantir leur existence sans qu'il soit nécessaire de vérifier manuellement leur présence.

Syntaxe pour PostgreSQL 9.1 et versions ultérieures

Pour créer une table en utilisant "CREATE TABLE IF NOT EXISTS" dans PostgreSQL 9.1 et versions ultérieures, spécifiez simplement la commande comme suit :

CREATE TABLE IF NOT EXISTS myschema.mytable (
  i integer
);
Copier après la connexion

Remarque : Remplacez "myschema" et "mytable" par les noms de schéma et de table souhaités.

Solution de contournement pour les anciennes versions

Pour les versions de PostgreSQL antérieures à 9.1, une fonction de contournement peut être utilisée pour obtenir un résultat similaire fonctionnalité. Créez la fonction suivante :

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$;
Copier après la connexion

Appelez la fonction selon vos besoins :

SELECT create_mytable();
Copier après la connexion

Remarques :

  • Les colonnes "schemaname " et "tablename" dans "pg_tables" sont sensible à la casse.
  • "pg_tables" ne contient que des tables réelles, pas des objets associés.
  • Envisagez d'utiliser "SECURITY DEFINER" si le rôle exécutant la fonction ne dispose pas des privilèges de création de table.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal