Rumah > pembangunan bahagian belakang > Golang > 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
Lepaskan: 2024-11-19 12:15:03
asal
732 orang telah melayarinya

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
Salin selepas log masuk

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
}
Salin selepas log masuk

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';
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan