3 回答

TA貢獻(xiàn)1854條經(jīng)驗(yàn) 獲得超8個(gè)贊
因?yàn)?,您正試圖dropDb
在數(shù)據(jù)庫(kù)上執(zhí)行命令,您已打開(kāi)連接到該數(shù)據(jù)庫(kù)。
根據(jù) postgres 文檔:
您無(wú)法連接到要?jiǎng)h除的數(shù)據(jù)庫(kù)。相反,連接到 template1 或任何其他數(shù)據(jù)庫(kù)并再次運(yùn)行此命令。
這是有道理的,因?yàn)楫?dāng)你刪除整個(gè)數(shù)據(jù)庫(kù)時(shí),所有引用該數(shù)據(jù)庫(kù)的打開(kāi)連接都變得無(wú)效,所以推薦的方法是連接到不同的數(shù)據(jù)庫(kù),然后再次執(zhí)行此命令。
如果您面臨這樣一種情況,即不同的客戶(hù)端連接到數(shù)據(jù)庫(kù),并且您確實(shí)想刪除該數(shù)據(jù)庫(kù),則可以強(qiáng)制斷開(kāi)所有客戶(hù)端與該特定數(shù)據(jù)庫(kù)的連接。
例如,強(qiáng)制斷開(kāi)所有客戶(hù)端與數(shù)據(jù)庫(kù)的連接mydb
:
如果 PostgreSQL < 9.2
SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE datname = 'mydb';
別的
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'mydb';
注意:此命令需要超級(jí)用戶(hù)權(quán)限。
然后,您可以連接到不同的數(shù)據(jù)庫(kù),并dropDb
再次運(yùn)行命令。

TA貢獻(xiàn)1887條經(jīng)驗(yàn) 獲得超5個(gè)贊
如果您在 IntelliJ 中遇到此問(wèn)題,請(qǐng)使用以下下拉列表將架構(gòu)更改為 postgres。
在那之后,我能夠刪除一個(gè)數(shù)據(jù)庫(kù)。

TA貢獻(xiàn)2080條經(jīng)驗(yàn) 獲得超4個(gè)贊
我在 Windows 10 中使用 PostgreSQL 12 和 pgAdmin-4。我不得不使用上述答案的組合來(lái)刪除一個(gè)數(shù)據(jù)庫(kù),我無(wú)法在 pgAdmin 中刪除它,因?yàn)槲覠o(wú)法關(guān)閉 pgAdmin 中的所有打開(kāi)的連接。
關(guān)閉 pgAdmin-4。
在 Windows 命令行中,假設(shè)我的服務(wù)器名稱(chēng)是 postgres,我的數(shù)據(jù)庫(kù)是 mydb:
C:\> psql -U postgres
我用我的服務(wù)器密碼登錄。
然后我關(guān)閉了與 mydb 的所有打開(kāi)的連接:
postgres-# SELECT * FROM pg_stat_activity WHERE pg_stat_activity.datname='mydb'; postgres-# SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'mydb';
最后,我成功刪除了 mydb:
postgres-# DROP DATABASE mydb;
現(xiàn)在,如果我回到 pgAdmin-4,它就消失了。
- 3 回答
- 0 關(guān)注
- 1353 瀏覽
添加回答
舉報(bào)