Menyelesaikan masalah Postgres Database Drop Ralat: "pq: cannot drop the current open database"
Dalam Postgres, anda mungkin menghadapi ralat "pq : tidak boleh menggugurkan pangkalan data yang sedang dibuka" apabila cuba menggugurkan pangkalan data yang sedang anda sambungkan. Ralat ini timbul kerana menjatuhkan pangkalan data memerlukan memutuskan sambungan semua sambungan terbuka kepadanya, yang akan memutuskan sambungan semasa anda dan menghalang anda daripada melaksanakan kenyataan DROP DATABASE.
Penyelesaian:
Seperti yang dicadangkan dalam dokumentasi Postgres, anda harus menyambung ke pangkalan data yang berbeza dan melaksanakan perintah DROP DATABASE dari sana. Ini memastikan tiada sambungan aktif wujud dalam pangkalan data yang anda mahu lepaskan.
Contoh:
import ( "database/sql" "fmt" ) func main() { // Connect to a different database (e.g., "template1") conn, err := sql.Open("postgres", "host=localhost user=postgres dbname=template1") if err != nil { panic(err) } defer conn.Close() // Drop the original database from the new connection _, err = conn.Exec(fmt.Sprintf(`DROP DATABASE %s;`, "mydb")) if err != nil { panic(err) } fmt.Println("Database dropped successfully.") }
Memaksa Pemutusan Sambungan Pelanggan (Awas):
Dalam senario di mana pelanggan lain disambungkan ke pangkalan data, anda boleh mempertimbangkan untuk memutuskan sambungan semua pelanggan secara paksa untuk memudahkan penurunan pangkalan data.
-- For PostgreSQL < 9.2 SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE datname = 'mydb'; -- For PostgreSQL >= 9.2 SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'mydb';
Nota: Tindakan ini memerlukan keistimewaan superuser dan harus digunakan dengan berhati-hati kerana ia boleh mengganggu sesi aktif.
Atas ialah kandungan terperinci Bagaimana untuk Membetulkan Ralat 'pq: tidak boleh menggugurkan pangkalan data yang sedang dibuka' dalam Postgres?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!