Contrairement à MySQL, PostgreSQL ne prend pas en charge la syntaxe couramment utilisée "CREATE DATABASE IF NOT EXISTS". Cela crée des défis lors de la création de bases de données via JDBC qui peuvent déjà exister ou non.
Méthode 1 : Utiliser des instructions conditionnelles dans psql
Cette méthode utilise des instructions DDL conditionnelles exécutées dans psql :
<code class="language-sql">SELECT 'CREATE DATABASE mydb' WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'mydb')\gexec</code>
gexec
demande à psql de traiter chaque colonne de la sortie de la requête comme une instruction SQL exécutable. Cela permet de créer la base de données uniquement si elle n'existe pas.
Méthode 2 : utiliser la commande shell pour exécuter une instruction conditionnelle
Pour éviter d'appeler psql plusieurs fois, vous pouvez utiliser des commandes shell pour exécuter des instructions conditionnelles :
<code class="language-bash">echo "SELECT 'CREATE DATABASE mydb' WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'mydb')\gexec" | psql</code>
Cette commande enveloppe l'instruction dans un bloc qui ne sera exécuté que si la base de données n'existe pas.
Méthode 3 : Utiliser dblink dans les transactions PostgreSQL
Une autre option consiste à utiliser dblink pour vous reconnecter à la base de données actuelle, ce qui est effectué en dehors de la transaction :
<code class="language-sql">DO $do$ BEGIN IF EXISTS (SELECT FROM pg_database WHERE datname = 'mydb') THEN RAISE NOTICE '数据库已存在'; ELSE PERFORM dblink_exec('dbname=' || current_database(), 'CREATE DATABASE mydb'); END IF; END $do$;</code>
Cette méthode nécessite l'installation du module dblink.
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!