Domanda

Ho un database PosgreSQL (io sono il proprietario) e mi piacerebbe farlo cadere e ricreare da una discarica.

Il problema è che ci sono una coppia di applicazioni (due siti web, guide e Perl) che accedono al db regolarmente. In modo da ottenere una "banca dati è in corso l'accesso da altri utenti" errore.

Ho letto che una possibilità sta ottenendo i PID dei processi coinvolti e ucciderli individualmente. Mi piacerebbe fare qualcosa di più pulito, se possibile.

phpPgAdmin sembra di fare ciò che voglio: io sono in grado di abbandonare gli schemi che utilizzano la sua interfaccia web, anche quando i siti sono, senza ottenere errori. Così sto indagando come funziona il suo codice. Tuttavia, non sono un esperto di PHP.

Sto cercando di capire il codice phppgadmin per vedere come lo fa. Ho scoperto una linea ( 257 in Schemas.php) dove si dice:

$data->dropSchema(...)

$data è una variabile globale e non sono riuscito a trovare in cui è definito.

Tutti gli indicatori sarebbe molto apprezzato.

È stato utile?

Soluzione

In primo luogo, trovare usando il database di tutti di procesid corrente:

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

In secondo luogo, uccidere i processi non si vuole:

SELECT pg_terminate_backend(your_procpid);

Questo funziona a partire dalla versione 8.4, altrimenti pg_terminate_backend () è sconosciuto e si deve uccidere il processo a livello di sistema operativo.


Per eliminare rapidamente tutti i collegamenti connessi a un determinato database, questa scorciatoia funziona bene. Deve essere eseguito come utente root:

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

Nelle versioni più recenti di Postgres (almeno 9.2+, probabilmente in precedenza), i nomi delle colonne sono cambiati e la query è:

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

Altri suggerimenti

Non sei sicuro di PostgreSQL, ma credo che una possibile soluzione potrebbe essere quella di bloccare la tabella in modo che altri processi non riuscirà quando tentano di accedervi.

Vedi: http://www.postgresql.org/docs/current/static/ sql-lock.html

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top