Apabila cuba menggugurkan pangkalan data, anda mungkin menghadapi ralat:
pq: cannot drop the currently open database
Ralat ini berlaku kerana anda cuba menggugurkan pangkalan data yang sedang anda sambungkan. Menggugurkan pangkalan data membatalkan semua sambungan terbuka kepadanya, termasuk yang anda gunakan.
Untuk menyelesaikan isu ini, disyorkan untuk menyambung ke pangkalan data lain dan laksanakan DROP DATABASE perintah dari sana. Ini memastikan bahawa anda mempunyai sambungan aktif untuk melaksanakan arahan sambil mengelakkan isu dengan menjatuhkan pangkalan data semasa.
Contoh Kod:
// Connect to a secondary database otherDbConn, err := sql.Open("postgres", "host=localhost port=5432 user=username dbname=otherdb") if err != nil { return err } // Execute DROP DATABASE command on other database _, err = otherDbConn.Exec(fmt.Sprintf(`DROP DATABASE %s;`, dbName)) if err != nil { return err } // Close the connection to the other database otherDbConn.Close()
Jika anda tidak boleh menyambung ke pangkalan data lain atau memilih untuk tidak melakukannya, anda boleh memutuskan sambungan semua pelanggan secara paksa daripada pangkalan data yang ingin anda lepaskan. Ini memerlukan keistimewaan superuser dan harus digunakan dengan berhati-hati.
Untuk versi Postgres di bawah 9.2:
SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE datname = 'mydb';
Untuk Postgres versi 9.2 dan ke atas:
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'mydb';
Selepas secara paksa memutuskan sambungan semua pelanggan, anda boleh menyambung ke pangkalan data yang berbeza dan melaksanakan DROP DATABASE perintah.
Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Menggugurkan Pangkalan Data Terbuka dalam Postgres?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!