phppgadmin: Nasıl postgres'in üzerinden kullanıcılara tekme yoktur, yani db_drop olabilir?

2 Cevap php

Ben bir PostgreSQL'de var (ben sahibi değilim) ve ben bırakın istiyorum ve bir dökümü yeniden oluşturmak.

Sorun düzenli db erişmek bir çift uygulamaları (iki web sitesi, raylar ve perl) oradayız, olduğunu. Yani bir "veritabanı diğer kullanıcılar tarafından erişilen ediliyor" hatası alıyorum.

Ben bir olasılık söz süreçlerin pids alma ve bunları tek tek öldürüyor olduğunu okudum. Ben mümkünse, temiz bir şeyler yapmak istiyorum.

Phppgadmin ne istediğinizi yapmak gibi görünüyor: Ben hataları almadan, web siteleri üzerinde bile, kendi web arayüzünü kullanarak şemalar düşmesi mümkün duyuyorum. Yani onun kod nasıl çalıştığını araştırıyorum. Ancak, hiçbir PHP uzman değilim.

Ben bunu nasıl yaptığını görmek için phppgadmin kodu anlamak için çalışıyorum. I a line (Schemas.php 257) öğrendim diyor burada:

$data->dropSchema(...)

$data global bir değişken olduğunu ve tanımlandığı nerede bulamadım.

Herhangi bir işaretçiler büyük takdir.

2 Cevap

Öncelikle, mevcut tüm procesid senin veritabanı kullanarak bulmak:

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

İkinci olarak, istemediğiniz işlemleri öldürmek:

SELECT pg_terminate_backend(your_procpid);

Bu aksi pg_terminate_backend, sürüm 8.4 olarak çalışır () bilinmeyen ve OS seviyesinde işlem öldürmek zorunda.


Hızla belirli bir veritabanına bağlı tüm bağlantıları kesmek için, bu kısayol güzel çalışıyor. Superuser olarak çalıştırmanız gerekir:

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

Daha yeni Postgres sürümleri (büyük olasılıkla daha erken, en az 9.2 +), sütun adları değişti ve sorgu:

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

PostgreSQL hakkında emin değilim ama olası bir çözüm onlar erişmeye çalıştığınızda böylece diğer işlemler başarısız olacaktır kilit tablo olacağını düşünüyorum.

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