162 votes

PostgreSQL - Renommer la base de données

J'ai besoin de renommer la base de données mais lorsque je le fais dans PGAdmin : ALTER DATABASE "databaseName" RENAME TO "databaseNameOld" il m'a dit qu'il ne pouvait pas.

Comment faire ?

( Version 8.3 sur WindowsXP )

Mise à jour

  • Le premier message d'erreur : Impossible car je me suis connecté. J'ai donc sélectionné une autre base de données et effectué les requêtes.

  • J'obtiens un deuxième message d'erreur m'indiquant que l'utilisateur ne s'est pas connecté. Je vois dans le PGAdmin l'écran qu'il possède de nombreux PID mais ils sont inactifs... Je ne vois pas comment les tuer.

223voto

bmdhacks Points 9074

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-là. Enfin, essayez d'afficher le message d'erreur qu'il renvoie afin que nous puissions obtenir un peu plus d'informations.

112voto

gsiems Points 1091

Pour référence future, vous devriez être en mesure de.. :

-- 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";

Il convient de noter que le tableau pg_stat_activity colonne pid a été nommé procpid dans les versions antérieures à la 9.2. Ainsi, si votre version de PostgreSQL est inférieure à 9.2, utilisez procpid au lieu de pid .

8voto

SQLDBA Points 1084

Je viens de rencontrer ce problème et voici ce qui a fonctionné :

1) pgAdmin est l'une des sessions. Utiliser psql au lieu de cela.
2) Arrêter le pgBouncer et/ou les services de planification sous Windows, car ils créent également des sessions

3voto

Patrick Desjardins Points 51478

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 a tué toutes les connexions existantes et ensuite je me suis connecté à une autre base de données et j'ai pu la renommer avec ma requête initiale.

Merci à tous.

3voto

Milen A. Radev Points 20462

Au lieu de déployer un nuke (redémarrer le serveur), vous devriez essayer de fermer les connexions qui vous dérangent, soit en trouvant d'où elles viennent et en arrêtant les processus clients, soit en utilisant la commande pg_cancel_backend() fonction.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X