Question

J'ai une base de données PosgreSQL (je suis le propriétaire) et je voudrais laisser tomber et recréer à partir d'une décharge.

Le problème est, il sont une des applications couple (deux sites, rails et Perl) qui accèdent au db régulièrement. Donc, je suis une « base de données est accessible par d'autres utilisateurs » erreur.

J'ai lu qu'une possibilité est de mettre le pid des processus impliqués et de les tuer individuellement. Je voudrais faire quelque chose plus propre, si possible.

phpPgAdmin semble faire ce que je veux: je suis en mesure d'abandonner les schémas utilisant son interface Web, même lorsque les sites sont sur, sans avoir des erreurs. Je suis donc étudier comment fonctionne son code. Cependant, je ne suis pas expert en PHP.

Je suis en train de comprendre le code phppgadmin afin de voir comment il le fait. J'ai trouvé une ligne ( 257 dans Schemas.php) où il est dit:

$data->dropSchema(...)

$data est une variable globale et je ne pouvais pas trouver où elle est définie.

Les pointeurs seraient grandement appréciés.

Était-ce utile?

La solution

Tout d'abord, trouver l'aide de votre base de données actuelle tous procesid:

SELECT usename, procpid FROM pg_stat_activity WHERE datname = current_database();

Deuxièmement, tuer les processus que vous ne voulez pas:

SELECT pg_terminate_backend(your_procpid);

Cela fonctionne de la version 8.4, sinon pg_terminate_backend () est inconnu et vous devez tuer le processus au niveau du système d'exploitation.


Pour supprimer rapidement toutes les connexions connectées à une base de données, ce raccourci fonctionne bien. Doit fonctionner comme super-utilisateur:

SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE datname='YourDB';

Les versions plus récentes Postgres (au moins 9.2+, probablement plus tôt), les noms de colonnes ont changé et la requête est:

SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname='YourDB';

Autres conseils

Je ne sais pas à propos de PostgreSQL, mais je pense qu'une solution possible serait de verrouiller la table pour d'autres processus échouera quand ils essaient d'y accéder.

Voir: http://www.postgresql.org/docs/current/static/ SQL-lock.html

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top