PostgreSQL: PostgreSQL veritabanını komut satırı üzerinden bırakın [kapalı]


321

Veritabanımı bırakmaya ve komut satırından yeni bir tane oluşturmaya çalışıyorum.

Kullanarak giriş psql -U usernameyapıyorum ve sonra a \connect template1, ardından a DROP DATABASE databasename;.

Hatayı alıyorum

veritabanı veri tabanına diğer kullanıcılar erişiyor

Apache'yi kapatıp tekrar denedim ama hala bu hatayı alıyorum. Yanlış bir şey mi yapıyorum?


2
dropdb databasenameKomutu komut satırından çalıştırırsanız ne olur ?
Dylan Markow

1
"HATA: şu anda açık olan veritabanını
bırakamıyor

4
Kullanım psql -U <user> -c "drop database protodb"(veritabanı adı olmadan)
kullanıcı

3
Bu, postgres'i yeniden başlatacak ve herkesin bağlantısını kesecektir: sudo service postgresql restart Sonra bir: dropdb -h localhost -p 5432 -U "youruser" "testdb" Özel karakterlerin sorunsuz bir şekilde girmesini sağlamak için "" dikkat edin.
Haziran'da unom

drop database <dataabase_name>;Virgül unutmayın.
Sandip Subedi

Yanıtlar:


455

Kaçabilirsiniz DROPDB komut satırından komut:

dropdb 'database name'

Bırakabilmek için bir süper kullanıcı veya veritabanı sahibi olmanız gerektiğini unutmayın.

Ayrıca, tüm boşta kalma işlemleri de dahil olmak üzere, veritabanınızda ne tür bir etkinlik olduğunu görmek için pg_stat_activity görünümünü kontrol edebilirsiniz.

SELECT * FROM pg_stat_activity WHERE datname='database name';

3
dropuserKullanıcıyı da kaldırmak için komut kullanıyorum .
pl1nk

6
Sürüm 9'da olduğu gibi yardımcı yanıt yok. Açılan bağlantılarla ilgili hata hala görünüyor.
Pavel Vlasov

4
Bu, postgres'i yeniden başlatacak ve herkesin bağlantısını kesecektir: sudo service postgresql restart Sonra bir: dropdb -h localhost -p 5432 -U "youruser" "testdb" Özel karakterlerin sorunsuz bir şekilde girmesini sağlamak için "" dikkat edin.
Haziran'da unom

1
postgres kullanıcısını kullanarak: sudo -u postgres dropdb 'veritabanı adı'
leszek.hanusz

\lsahip olduğunuz tüm veritabanlarını görmek için.
Sandip Subedi

115

Bu benim için çalıştı:

select pg_terminate_backend(pid) from pg_stat_activity where datname='YourDatabase';

postgresql için daha erken 9.2 yerine pidsahipprocpid

DROP DATABASE "YourDatabase";

http://blog.gahooa.com/2010/11/03/how-to-force-drop-a-postgresql-database-by-killing-off-connection-processes/


12
Çalışmak için biraz değiştirmek zorunda kaldı:select pg_terminate_backend(pid) from pg_stat_activity where datname='YourDatabase';
mrt

column "procpid" does not existamazon RDS postgres 9.6 örneği için
anon58192932

Hm. Bunu koştum, ancak "SSL bağlantısı beklenmedik bir şekilde kapandı [...] sıfırlanmaya çalışılıyor: Başarılı." Annnd, geri döndüm.
mlissner

67

Bunu dene. Hiçbir veritabanı belirtilmediğini unutmayın - sadece "sunucuda" çalışır

psql -U postgres -c "drop database databasename"

Bu işe yaramazsa, öksüz hazırlanan ifadelere tutunan postgres ile ilgili bir sorun gördüm.
Onları temizlemek için şunu yapın:

SELECT * FROM pg_prepared_xacts;

sonra gördüğünüz her kimlik için şunu çalıştırın:

ROLLBACK PREPARED '<id>';

Üzgünüm, veritabanlarında yeniyim, bu yüzden bu muhtemelen aptalca bir soru, ama bunu nereye yazarım? Veritabanına giriş yapmadan önce değil mi? Veritabanının adını veritabanımın adıyla değiştirmem gerekir mi?
iman453

@ iman453: Bunu doğrudan kabuk / komut satırından çalıştırırdın.
mu çok kısa

2
Postgresql için "sadece sunucuda" diye bir şey yoktur. Bir veritabanına bağlanmanız gerekir. Bu durumda postgres veri tabanına bağlanacaksınız. Ve hazırlanmış işlemler üzerinde iyi bir nokta, ama bu durumda sorun olduğunu söyleyen bir hata mesajı almalısınız.
Scott Marlowe

1
Üzgünüm Bohemian, ama yanlış olan sensin. Oluşturulanb komut satırından pg_stat_activity şu şekildedir: pggtat_activity; postgres = # select *; 11564 | postgres | 22223 | 16384 | smarlowe | VERİTABANI CREATE testi; | f | 2011-08-19 16: 18: 26.918933-06 | 2011-08-19 16: 18: 26.918933-06 | 2011-08-19 16: 18: 26.916578-06 | | -1 Bunun başka bir terminaldeki komut satırından createb çalıştırılırken gerçekleştiğini unutmayın. Bu ilk alan, oluşturulan komut dosyamın bağlı olduğu db
Scott Marlowe

1
Bu neden birinci sıradaki cevap değil?
Henley Chiu

16

Kullanıcıların bağlı olduğu söylendiğinde, "pg_stat_activity; söyle? Sizin dışında diğer kullanıcılar da şimdi bağlı mı? Öyleyse, diğer kullanıcıların bağlantılarını reddetmek için pg_hba.conf dosyanızı düzenlemeniz veya pg veritabanına erişebilmek için pg veritabanına erişen her şeyi kapatmanız gerekebilir. Üretimde zaman zaman bu problemim var. Pg_hba.conf dosyasını aşağıdaki gibi iki satır olacak şekilde ayarlayın:

local   all         all                               ident
host    all         all         127.0.0.1/32          reject

pgsql'ye yeniden yüklemesini veya yeniden başlatmasını söyleyin (yani sudo /etc/init.d/postgresql reload veya pg_ctl reload) ve şimdi makinenize bağlanmanın tek yolu yerel soketlerdir. Linux'ta olduğunuzu varsayıyorum. Değilse, bu ilk satırda local / ident dışında bir şey, host ... adınız gibi bir şey için ayarlanması gerekebilir.

Şimdi şunları yapabilmelisiniz:

psql postgres
drop database mydatabase;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.