Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menggugurkan Pangkalan Data PostgreSQL yang Disambungkan Pada Masa Ini?

Bagaimana untuk Menggugurkan Pangkalan Data PostgreSQL yang Disambungkan Pada Masa Ini?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-19 12:15:03671semak imbas

How to Drop a Currently Connected PostgreSQL Database?

Ralat dalam Menggugurkan Pangkalan Data Postgres Yang Disambungkan Pada Masa Ini

Apabila cuba menggugurkan pangkalan data yang sedang anda sambungkan dalam Postgres, anda mungkin menghadapi ralat berikut:

pq: cannot drop the currently open database

Ralat ini timbul kerana kejatuhan pangkalan data memerlukan sambungan tertutup ke pangkalan data yang dialih keluar. Kekeliruan terletak pada ketidakupayaan untuk melaksanakan DROP DATABASE menggunakan dbConn.Exec jika sambungan ditutup.

Penyelesaian

Pendekatan yang disyorkan untuk menggugurkan pangkalan data yang sedang disambungkan adalah dengan menyambung ke pangkalan data yang berbeza dan laksanakan arahan DROP DATABASE dari sana. Ini kerana sambungan kepada pangkalan data yang digugurkan menjadi tidak sah apabila pemadamannya.

Contohnya:

import "github.com/lib/pq"

...

func dropDatabase(dbName string) error {
    // Connect to a different database (e.g., template1)
    otherConn, err := pq.Open("other_conn_string")
    if err != nil {
        return err
    }
    defer otherConn.Close()
    
    // Drop the desired database from the other connection
    _, err = otherConn.Exec(fmt.Sprintf(`DROP DATABASE %s;`, dbName))
    return err
}

Pendekatan Alternatif (Pemutus Sambungan)

Dalam senario di mana pelanggan yang berbeza disambungkan ke pangkalan data yang digugurkan dan anda memerlukan penyingkiran segera, anda boleh memutuskan sambungan semua pelanggan secara paksa daripada pangkalan data sasaran menggunakan arahan berikut (keperluan berbeza-beza bergantung pada versi PostgreSQL):

-- PostgreSQL < 9.2
SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE datname = 'mydb';

-- PostgreSQL >= 9.2
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'mydb';

Nota: Jalankan arahan ini dengan keistimewaan superuser. Setelah pelanggan diputuskan sambungan secara paksa, anda boleh menyambung ke pangkalan data lain dan melaksanakan perintah DROP DATABASE.

Atas ialah kandungan terperinci Bagaimana untuk Menggugurkan Pangkalan Data PostgreSQL yang Disambungkan Pada Masa Ini?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn