PostgreSQL 實(shí)現(xiàn)快速刪除一個用戶
背景
在多租戶場景或者其他場景下,很多時候需要主動清理一些用戶,本文將介紹PostgreSQL 下如何快速刪除一個用戶(role)。
具體方法
一般情況下直接執(zhí)行 drop role xxx; 就可以把這個用戶刪除。但是很多時候會因?yàn)橛脩粲幸蕾嚩鴪箦e。
權(quán)限依賴
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ù)庫postgres 的權(quán)限賦予了test 用戶,所以直接刪除的時候會報錯。面對這種情況,我們需要先將role 的權(quán)限所有的權(quán)限全部revoke 掉,如下:
postgres=# revoke all on database postgres from test; REVOKE postgres=# drop role test; DROP ROLE
注意:需要把該用戶在所有數(shù)據(jù)庫具有權(quán)限的所有數(shù)據(jù)庫對象的(表,視圖,SEQUENCE)權(quán)限全部回收,才能刪除該用戶。
對象依賴
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 用戶是test 表的owner,所以刪除的時候報錯owner of table test。如果不需要保留該對象,則需要先把該依賴對象刪除。如果需要保留該對象,則應(yīng)該在刪除之前先把owner 賦予別人,如下:
postgres=# alter table test OWNER TO postgres; ALTER TABLE postgres=# drop role test; DROP ROLE
注意:需要把該用戶在所有數(shù)據(jù)庫具有owner 權(quán)限的所有數(shù)據(jù)庫對象(表,視圖,SEQUENCE)刪除或者執(zhí)行alter xx owner to,才能刪除該用戶。
更牛的方法
如果不保留owner 的數(shù)據(jù)庫對象
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ù)庫對象
postgres=# REASSIGN OWNED BY test TO postgres; REASSIGN OWNED postgres=# drop role test; DROP ROLE
注意:REASSIGN OWNED 需要執(zhí)行者所屬的role (或者子集)必須包含test 和postgres 或者是superuser。另外必須所有涉及到的數(shù)據(jù)庫上都執(zhí)行該以上語句才能刪除用戶。
補(bǔ)充:PostgreSQL數(shù)據(jù)庫創(chuàng)建/刪除
方法1 - 系統(tǒng)命令
sudo su - postgres #切換到postgres用戶(系統(tǒng)用戶) createdb weichen #創(chuàng)建數(shù)據(jù)庫 psql #直接訪問數(shù)據(jù)庫(默認(rèn)進(jìn)入本地postgres數(shù)據(jù)庫) \l --查看數(shù)據(jù)庫列表 :q --退出列表頁面 \q --退出客戶端 dropdb weichen #刪除數(shù)據(jù)庫
方法2 - psql命令行
sudo -u postgres psql #登錄客戶端 create database weichen; --創(chuàng)建數(shù)據(jù)庫 create database sz owner postgres; --創(chuàng)建數(shù)據(jù)庫 select oid,datname from pg_database; --查看數(shù)據(jù)庫列表 drop database weichen; --刪除數(shù)據(jù)庫 drop database sz; --刪除數(shù)據(jù)庫
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
postgres 使用存儲過程批量插入數(shù)據(jù)的操作
這篇文章主要介紹了postgres 使用存儲過程批量插入數(shù)據(jù)的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02
對PostgreSQL中的慢查詢進(jìn)行分析和優(yōu)化的操作指南
在數(shù)據(jù)庫的世界里,慢查詢就像是路上的絆腳石,讓數(shù)據(jù)處理的道路變得崎嶇不平,想象一下,你正在高速公路上飛馳,突然遇到一堆減速帶,那感覺肯定糟透了,本文介紹了怎樣對?PostgreSQL?中的慢查詢進(jìn)行分析和優(yōu)化,需要的朋友可以參考下2024-07-07
PostgreSQL 序列綁定字段與不綁定字段的區(qū)別說明
這篇文章主要介紹了PostgreSQL 序列綁定字段與不綁定字段的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02
postgresql數(shù)據(jù)庫根據(jù)年月查詢出本月的所有數(shù)據(jù)操作
這篇文章主要介紹了postgresql數(shù)據(jù)庫根據(jù)年月查詢出本月的所有數(shù)據(jù)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12
詳解PostgreSQL 實(shí)現(xiàn)定時任務(wù)的 4 種方法
這篇文章主要介紹了PostgreSQL 實(shí)現(xiàn)定時任務(wù)的 4 種方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-02-02
解決sqoop從postgresql拉數(shù)據(jù),報錯TCP/IP連接的問題
這篇文章主要介紹了解決sqoop從postgresql拉數(shù)據(jù),報錯TCP/IP連接的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12
使用Postgresql 實(shí)現(xiàn)快速插入測試數(shù)據(jù)
這篇文章主要介紹了使用Postgresql 實(shí)現(xiàn)快速插入測試數(shù)據(jù),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01
postgresql 計算距離的實(shí)例(單位直接生成米)
這篇文章主要介紹了postgresql 計算距離的實(shí)例(單位直接生成米),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01

