Maison > développement back-end > Golang > Pourquoi ne puis-je pas supprimer une base de données ouverte dans Postgres ?

Pourquoi ne puis-je pas supprimer une base de données ouverte dans Postgres ?

Patricia Arquette
Libérer: 2024-11-19 10:28:02
original
497 Les gens l'ont consulté

Why Can't I Drop an Open Database in Postgres?

Problème lors de la suppression d'une base de données ouverte dans Postgres

Erreur rencontrée

Lorsque vous essayez de supprimer une base de données, vous pouvez rencontrer l'erreur :

pq: cannot drop the currently open database
Copier après la connexion

Comprendre le problème

Cette erreur se produit parce que vous essayez de supprimer la base de données à laquelle vous êtes actuellement connecté. La suppression d'une base de données invalide toutes les connexions ouvertes à celle-ci, y compris celle que vous utilisez.

Solution recommandée

Pour résoudre ce problème, il est recommandé de se connecter à une autre base de données et d'exécuter la commande DROP DATABASE. commande à partir de là. Cela garantit que vous disposez d'une connexion active pour exécuter la commande tout en évitant le problème de suppression de la base de données actuelle.

Exemple de code :

// Connect to a secondary database
otherDbConn, err := sql.Open("postgres", "host=localhost port=5432 user=username dbname=otherdb")
if err != nil {
  return err
}

// Execute DROP DATABASE command on other database
_, err = otherDbConn.Exec(fmt.Sprintf(`DROP DATABASE %s;`, dbName))
if err != nil {
  return err
}

// Close the connection to the other database
otherDbConn.Close()
Copier après la connexion

Solution alternative : déconnexion forcée du client

Si vous ne pouvez pas vous connecter à une autre base de données ou si vous préférez ne pas le faire, vous pouvez forcer la déconnexion de tous les clients de la base de données que vous souhaitez supprimer. Cela nécessite des privilèges de superutilisateur et doit être utilisé avec prudence.

Pour les versions de Postgres inférieures à 9.2 :

SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE datname = 'mydb';
Copier après la connexion

Pour les versions de Postgres 9.2 et supérieures :

SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'mydb';
Copier après la connexion

Après avoir forcé en déconnectant tous les clients, vous pouvez vous connecter à une autre base de données et exécuter la commande DROP DATABASE.

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