主頁(yè) > 知識(shí)庫(kù) > PostgreSQL 實(shí)現(xiàn)快速刪除一個(gè)用戶(hù)

PostgreSQL 實(shí)現(xiàn)快速刪除一個(gè)用戶(hù)

熱門(mén)標(biāo)簽:漯河外呼電話(huà)系統(tǒng) 海豐有多少商家沒(méi)有地圖標(biāo)注 地圖標(biāo)注和圖片名稱(chēng)的區(qū)別 重慶自動(dòng)外呼系統(tǒng)定制 辦公外呼電話(huà)系統(tǒng) 外呼調(diào)研系統(tǒng) 合肥公司外呼系統(tǒng)運(yùn)營(yíng)商 打電話(huà)智能電銷(xiāo)機(jī)器人授權(quán) 美容工作室地圖標(biāo)注

背景

在多租戶(hù)場(chǎng)景或者其他場(chǎng)景下,很多時(shí)候需要主動(dòng)清理一些用戶(hù),本文將介紹PostgreSQL 下如何快速刪除一個(gè)用戶(hù)(role)。

具體方法

一般情況下直接執(zhí)行 drop role xxx; 就可以把這個(gè)用戶(hù)刪除。但是很多時(shí)候會(huì)因?yàn)橛脩?hù)有依賴(lài)而報(bào)錯(cuò)。

權(quán)限依賴(lài)

postgres=# create role test with login;
CREATE ROLE
postgres=# grant all on database postgres to test;
GRANT
postgres=# drop role test;
ERROR: role "test" cannot be dropped because some objects depend on it
DETAIL: privileges for database postgres

可以看出,因?yàn)槲覀儼褦?shù)據(jù)庫(kù)postgres 的權(quán)限賦予了test 用戶(hù),所以直接刪除的時(shí)候會(huì)報(bào)錯(cuò)。面對(duì)這種情況,我們需要先將role 的權(quán)限所有的權(quán)限全部revoke 掉,如下:

postgres=# revoke all on database postgres from test;
REVOKE
postgres=# drop role test;
DROP ROLE

注意:需要把該用戶(hù)在所有數(shù)據(jù)庫(kù)具有權(quán)限的所有數(shù)據(jù)庫(kù)對(duì)象的(表,視圖,SEQUENCE)權(quán)限全部回收,才能刪除該用戶(hù)。

對(duì)象依賴(lài)

postgres=# create role test with login;
CREATE ROLE
postgres=# \c - test
You are now connected to database "postgres" as user "test".
postgres=> create table test (id int);
CREATE TABLE
postgres=# \c - postgres
You are now connected to database "postgres" as user "postgres".
postgres=# drop role test;
ERROR: role "test" cannot be dropped because some objects depend on it
DETAIL: owner of table test

可以看出,因?yàn)閠est 用戶(hù)是test 表的owner,所以刪除的時(shí)候報(bào)錯(cuò)owner of table test。如果不需要保留該對(duì)象,則需要先把該依賴(lài)對(duì)象刪除。如果需要保留該對(duì)象,則應(yīng)該在刪除之前先把owner 賦予別人,如下:

postgres=# alter table test OWNER TO postgres;
ALTER TABLE
postgres=# drop role test;
DROP ROLE

注意:需要把該用戶(hù)在所有數(shù)據(jù)庫(kù)具有owner 權(quán)限的所有數(shù)據(jù)庫(kù)對(duì)象(表,視圖,SEQUENCE)刪除或者執(zhí)行alter xx owner to,才能刪除該用戶(hù)。

更牛逼的方法

如果不保留owner 的數(shù)據(jù)庫(kù)對(duì)象

postgres=# REASSIGN OWNED BY test TO postgres;
REASSIGN OWNED
postgres=# DROP OWNED BY test;
DROP OWNED
postgres=# drop role test;
DROP ROLE

如果保留owner 的數(shù)據(jù)庫(kù)對(duì)象

postgres=# REASSIGN OWNED BY test TO postgres;
REASSIGN OWNED
postgres=# drop role test;
DROP ROLE

注意:REASSIGN OWNED 需要執(zhí)行者所屬的role (或者子集)必須包含test 和postgres 或者是superuser。另外必須所有涉及到的數(shù)據(jù)庫(kù)上都執(zhí)行該以上語(yǔ)句才能刪除用戶(hù)。

補(bǔ)充:PostgreSQL數(shù)據(jù)庫(kù)創(chuàng)建/刪除

方法1 - 系統(tǒng)命令

sudo su - postgres #切換到postgres用戶(hù)(系統(tǒng)用戶(hù))
createdb weichen #創(chuàng)建數(shù)據(jù)庫(kù)
psql #直接訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)(默認(rèn)進(jìn)入本地postgres數(shù)據(jù)庫(kù))
\l --查看數(shù)據(jù)庫(kù)列表
:q --退出列表頁(yè)面
\q --退出客戶(hù)端
dropdb weichen #刪除數(shù)據(jù)庫(kù)

方法2 - psql命令行

sudo -u postgres psql #登錄客戶(hù)端
create database weichen; --創(chuàng)建數(shù)據(jù)庫(kù)
create database sz owner postgres; --創(chuàng)建數(shù)據(jù)庫(kù)
select oid,datname from pg_database; --查看數(shù)據(jù)庫(kù)列表
drop database weichen; --刪除數(shù)據(jù)庫(kù)
drop database sz; --刪除數(shù)據(jù)庫(kù)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • postgresql 刪除重復(fù)數(shù)據(jù)的幾種方法小結(jié)
  • PostgreSQL 刪除check約束的實(shí)現(xiàn)
  • postgresql刪除主鍵的操作
  • postgresql 實(shí)現(xiàn)多表關(guān)聯(lián)刪除
  • Postgresql創(chuàng)建新增、刪除與修改觸發(fā)器的方法
  • PostgreSQL刪除更新優(yōu)化操作
  • mybatis postgresql 批量刪除操作方法
  • postgresql 刪除重復(fù)數(shù)據(jù)案例詳解

標(biāo)簽:來(lái)賓 錦州 蚌埠 衡陽(yáng) 烏海 晉城 珠海 株洲

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PostgreSQL 實(shí)現(xiàn)快速刪除一個(gè)用戶(hù)》,本文關(guān)鍵詞  PostgreSQL,實(shí)現(xiàn),快速,刪除,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PostgreSQL 實(shí)現(xiàn)快速刪除一個(gè)用戶(hù)》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于PostgreSQL 實(shí)現(xiàn)快速刪除一個(gè)用戶(hù)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章