Di PostgreSQL * , Anda tidak bisa menjatuhkan basis data saat klien terhubung dengannya.
Setidaknya, tidak dengan dropdb
utilitas - yang hanya merupakan pembungkus sederhana di sekitar DROP DATABASE
permintaan server.
Solusi yang cukup kuat berikut:
Terhubung ke server Anda sebagai pengguna super , menggunakan psql
atau klien lain. Jangan tidak menggunakan database Anda ingin menjatuhkan.
psql -h localhost postgres postgres
Sekarang menggunakan klien database biasa, Anda dapat memaksa drop database menggunakan tiga langkah sederhana:
Pastikan tidak ada yang bisa terhubung ke database ini. Anda dapat menggunakan salah satu metode berikut (yang kedua tampaknya lebih aman, tetapi tidak mencegah koneksi dari pengguna super).
/* Method 1: update system catalog */
UPDATE pg_database SET datallowconn = 'false' WHERE datname = 'mydb';
/* Method 2: use ALTER DATABASE. Superusers still can connect!
ALTER DATABASE mydb CONNECTION LIMIT 0; */
Putuskan sambungan semua klien yang terhubung ke database ini, menggunakan pg_terminate_backend
.
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE datname = 'mydb';
/* For old versions of PostgreSQL (up to 9.1), change pid to procpid:
SELECT pg_terminate_backend(procpid)
FROM pg_stat_activity
WHERE datname = 'mydb'; */
Jatuhkan basis data.
DROP DATABASE mydb;
Langkah 1 membutuhkan hak superuser untuk metode pertama, dan hak istimewa pemilik basis data untuk metode kedua. Langkah 2 membutuhkan hak superuser . Langkah 3 membutuhkan hak istimewa pemilik basis data .
* Ini berlaku untuk semua versi PostgreSQL, hingga versi 11.