J'ai besoin de renommer la base de données mais quand je le fais dans PGAdmin : ALTER DATABASE "databaseName" RENAME TO "databaseNameOld"
il m'a dit que non.
Comment puis-je le faire?
(Version 8.3 sur WindowsXP)
Mise à jour
Le premier message d'erreur: impossible parce que j'y étais connecté. J'ai donc sélectionné une autre base de données et fait les requêtes.
Je reçois un deuxième message d'erreur m'informant que l'utilisateur est connecté. Je vois dans l'écran PGAdmin
qu'il y a beaucoup PID
mais ils sont inactifs ... Je ne vois pas comment les tuer.
Essayez de ne pas citer le nom de la base de données:
ALTER DATABASE people RENAME TO customers;
Assurez-vous également qu'aucun autre client n'est connecté à la base de données à ce moment. Enfin, essayez de publier le message d'erreur qu'il renvoie afin que nous puissions obtenir un peu plus d'informations.
Pour référence future, vous devriez pouvoir:
-- disconnect from the database to be renamed
\c postgres
-- force disconnect all other clients from the database to be renamed
SELECT pg_terminate_backend( pid )
FROM pg_stat_activity
WHERE pid <> pg_backend_pid( )
AND datname = 'name of database';
-- rename the database (it should now have zero clients)
ALTER DATABASE "name of database" RENAME TO "new name of database";
Notez que le tableau pg_stat_activity
la colonne pid
était nommée procpid
dans les versions antérieures à 9.2. Donc, si votre version PostgreSQL est inférieure à 9.2, utilisez procpid
au lieu de pid
.
Je suis juste tombé sur ceci et voici ce qui a fonctionné:
1) pdAdmin
est l'une des sessions. Utilisez psql
à la place.
2) Arrêtez les services pgBouncer
et/ou le planificateur sous Windows car ils créent également des sessions
Unexist m'a dit en commentaire de redémarrer la base de données et ça marche! Le redémarrage de la base de données tue toutes les connexions existantes, puis je me connecte à une autre base de données et j'ai pu la renommer avec ma requête initiale.
Merci à tous.
Au lieu de déployer un Nuke (redémarrage du serveur), vous devez essayer de fermer les connexions qui vous dérangent soit en trouvant d'où elles viennent et en arrêtant les processus client, soit en utilisant pg_cancel_backend()
= fonction.