PostgreSQL清空數(shù)據(jù)庫的常用方法
PostgreSQL 中“清空一個數(shù)據(jù)庫”通常有幾種理解和對應(yīng)方法,具體取決于你的需求:
- 只清空所有數(shù)據(jù)(保留表結(jié)構(gòu)、索引、約束等):推薦使用
TRUNCATE。 - 徹底清空(刪除所有表、視圖、序列等對象,保留空數(shù)據(jù)庫):推薦
DROP SCHEMA+CREATE SCHEMA。 - 完全刪除并重建數(shù)據(jù)庫:最簡單粗暴的方式。
注意事項(非常重要):
- 操作前備份數(shù)據(jù)!清空是不可逆的。
- 需要超級用戶或數(shù)據(jù)庫所有者權(quán)限。
- 大部分操作會鎖定表,生產(chǎn)環(huán)境慎用。
- 如果有外鍵約束,
TRUNCATE或DROP可能需要加CASCADE。
1. 最推薦:只清空數(shù)據(jù)(保留表結(jié)構(gòu))—— 使用 TRUNCATE
TRUNCATE 比 DELETE 快得多,且立即釋放空間。
方法 A:手動清空單個或多個表
TRUNCATE TABLE table1, table2, table3 RESTART IDENTITY CASCADE;
RESTART IDENTITY:同時重置自增序列(序列從 1 開始)。CASCADE:自動清空有外鍵引用的表(小心使用)。
方法 B:自動清空當前 schema(通常是 public)中的所有表
在 psql 中執(zhí)行以下腳本:
DO $$
DECLARE
r RECORD;
BEGIN
FOR r IN (SELECT tablename FROM pg_tables WHERE schemaname = current_schema()) LOOP
EXECUTE 'TRUNCATE TABLE ' || quote_ident(r.tablename) || ' RESTART IDENTITY CASCADE;';
END LOOP;
END $$;
或者生成 SQL 后執(zhí)行(更靈活):
SELECT 'TRUNCATE TABLE ' || tablename || ' RESTART IDENTITY CASCADE;' FROM pg_tables WHERE schemaname = 'public';
復(fù)制輸出結(jié)果并執(zhí)行即可。
2. 徹底清空數(shù)據(jù)庫(刪除所有對象,保留空庫)
最簡單高效的方式是刪除并重建默認 schema(public):
DROP SCHEMA public CASCADE; CREATE SCHEMA public; -- 恢復(fù)默認權(quán)限(推薦加上) GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO public;
這會刪除所有表、視圖、函數(shù)、序列等,數(shù)據(jù)庫本身還在,但已經(jīng)是空的。
3. 完全刪除并重建整個數(shù)據(jù)庫
使用 SQL(需要在 postgres 或其他數(shù)據(jù)庫中執(zhí)行,不能在目標數(shù)據(jù)庫里刪自己)
DROP DATABASE IF EXISTS your_database_name; CREATE DATABASE your_database_name;
使用命令行工具(推薦)
# 刪除數(shù)據(jù)庫 dropdb -U postgres your_database_name # 創(chuàng)建新數(shù)據(jù)庫 createdb -U postgres your_database_name
或者用 pgAdmin 圖形界面操作更直觀。
4. 其他常見場景
- 清空后重置序列:在
TRUNCATE時加RESTART IDENTITY,或單獨執(zhí)行ALTER SEQUENCE seq_name RESTART WITH 1;。 - 釋放磁盤空間:清空后如果空間沒釋放,可執(zhí)行:
VACUUM FULL;
(會鎖表,生產(chǎn)環(huán)境慎用;平時用 VACUUM 即可)。
- 只刪除數(shù)據(jù)不重置序列:
TRUNCATE ... CONTINUE IDENTITY;(默認行為)。
建議
- 開發(fā)/測試環(huán)境:用方法 2(DROP SCHEMA)最方便。
- 生產(chǎn)環(huán)境:強烈建議用方法 1(TRUNCATE),并在事務(wù)中測試。
- 如果數(shù)據(jù)庫很大,
TRUNCATE仍然是最快的清空方式。
到此這篇關(guān)于PostgreSQL清空數(shù)據(jù)庫的常用方法的文章就介紹到這了,更多相關(guān)PostgreSQL清空數(shù)據(jù)庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
對PostgreSQL中的慢查詢進行分析和優(yōu)化的操作指南
在數(shù)據(jù)庫的世界里,慢查詢就像是路上的絆腳石,讓數(shù)據(jù)處理的道路變得崎嶇不平,想象一下,你正在高速公路上飛馳,突然遇到一堆減速帶,那感覺肯定糟透了,本文介紹了怎樣對?PostgreSQL?中的慢查詢進行分析和優(yōu)化,需要的朋友可以參考下2024-07-07
RuoYi從MySQL遷移到PostgreSQL數(shù)據(jù)庫的踩坑實錄
隨著業(yè)務(wù)發(fā)展對數(shù)據(jù)庫性能要求的提升,MySQL遷移至PostgreSQL成為企業(yè)級應(yīng)用的常見需求,下面這篇文章主要介紹了RuoYi從MySQL遷移到PostgreSQL數(shù)據(jù)庫的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2026-02-02
Cenots7 離線安裝部署PostgreSQL 的詳細過程
這篇文章主要介紹了Cenots7 離線安裝部署PostgreSQL 的詳細過程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-10-10
PostgreSQL 實現(xiàn)sql放入文件批量執(zhí)行
這篇文章主要介紹了PostgreSQL 實現(xiàn)sql放入文件批量執(zhí)行,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02
PostgreSQL 主備數(shù)據(jù)宕機恢復(fù)測試方案
這篇文章主要介紹了PostgreSQL 主備數(shù)據(jù)宕機恢復(fù)測試方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01
PostgreSQL中進行數(shù)據(jù)導(dǎo)入和導(dǎo)出
在PostgreSQL中,數(shù)據(jù)的導(dǎo)入和導(dǎo)出是數(shù)據(jù)庫管理中不可或缺的操作,通過使用COPYCOPYpg_dump和pg_dumpall等工具,您可以高效地管理您的數(shù)據(jù),感興趣的可以了解一下2026-05-05
PostgreSQL?10分區(qū)表及性能測試報告小結(jié)
PostgreSQL的分區(qū)表跟先前版本一樣,也要先建立主表,然后再建立子表,使用繼承的特性,但不需要手工寫規(guī)則了,目前支持range、list分區(qū),10正式版本發(fā)布時不知會不會支持其它方法,感興趣的朋友跟隨小編一起看看吧2022-01-01

