Maison > développement back-end > Golang > le corps du texte

Comment supprimer une base de données PostgreSQL actuellement connectée ?

Mary-Kate Olsen
Libérer: 2024-11-19 12:15:03
original
665 Les gens l'ont consulté

How to Drop a Currently Connected PostgreSQL Database?

Erreur lors de la suppression de la base de données Postgres actuellement connectée

Lorsque vous essayez de supprimer la base de données à laquelle vous êtes actuellement connecté dans Postgres, vous pouvez rencontrer l'erreur suivante :

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

Cette erreur se produit car les suppressions de bases de données nécessitent une connexion fermée à la base de données en cours de suppression. La confusion réside dans l'incapacité d'exécuter DROP DATABASE à l'aide de dbConn.Exec si la connexion est fermée.

Solution

L'approche recommandée pour supprimer une base de données actuellement connectée consiste à se connecter à une autre base de données et exécutez la commande DROP DATABASE à partir de là. En effet, la connexion à la base de données en cours de suppression devient invalide lors de sa suppression.

Par exemple :

import "github.com/lib/pq"

...

func dropDatabase(dbName string) error {
    // Connect to a different database (e.g., template1)
    otherConn, err := pq.Open("other_conn_string")
    if err != nil {
        return err
    }
    defer otherConn.Close()
    
    // Drop the desired database from the other connection
    _, err = otherConn.Exec(fmt.Sprintf(`DROP DATABASE %s;`, dbName))
    return err
}
Copier après la connexion

Approche alternative (déconnexion forcée)

Dans les scénarios où un Si un client différent est connecté à la base de données en cours de suppression et que vous avez besoin d'une suppression urgente, vous pouvez forcer la déconnexion de tous les clients de la base de données cible à l'aide des commandes suivantes (les exigences varient en fonction de Version PostgreSQL) :

-- PostgreSQL < 9.2
SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE datname = 'mydb';

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

Remarque : Exécutez ces commandes avec les privilèges de superutilisateur. Une fois les clients déconnectés de force, 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