【PostgreSQL】如何清空数据库?

PostgreSQL 中"清空一个数据库"通常有几种理解和对应方法,具体取决于你的需求:

  • 只清空所有数据(保留表结构、索引、约束等) :推荐使用 TRUNCATE
  • 彻底清空(删除所有表、视图、序列等对象,保留空数据库) :推荐 DROP SCHEMA + CREATE SCHEMA
  • 完全删除并重建数据库:最简单粗暴的方式。

注意事项(非常重要)

  • 操作前备份数据!清空是不可逆的。
  • 需要超级用户或数据库所有者权限。
  • 大部分操作会锁定表,生产环境慎用。
  • 如果有外键约束,TRUNCATEDROP 可能需要加 CASCADE

1. 最推荐:只清空数据(保留表结构)------ 使用 TRUNCATE

TRUNCATEDELETE 快得多,且立即释放空间。

方法 A:手动清空单个或多个表
sql 复制代码
TRUNCATE TABLE table1, table2, table3 RESTART IDENTITY CASCADE;
  • RESTART IDENTITY:同时重置自增序列(序列从 1 开始)。
  • CASCADE:自动清空有外键引用的表(小心使用)。
方法 B:自动清空当前 schema(通常是 public)中的所有表

在 psql 中执行以下脚本:

sql 复制代码
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 后执行(更灵活):

sql 复制代码
SELECT 'TRUNCATE TABLE ' || tablename || ' RESTART IDENTITY CASCADE;'
FROM pg_tables 
WHERE schemaname = 'public';

复制输出结果并执行即可。

2. 彻底清空数据库(删除所有对象,保留空库)

最简单高效的方式是删除并重建默认 schema(public):

sql 复制代码
DROP SCHEMA public CASCADE;
CREATE SCHEMA public;

-- 恢复默认权限(推荐加上)
GRANT ALL ON SCHEMA public TO postgres;
GRANT ALL ON SCHEMA public TO public;

这会删除所有表、视图、函数、序列等,数据库本身还在,但已经是空的。

3. 完全删除并重建整个数据库

使用 SQL(需要在 postgres 或其他数据库中执行,不能在目标数据库里删自己)
sql 复制代码
DROP DATABASE IF EXISTS your_database_name;
CREATE DATABASE your_database_name;
使用命令行工具(推荐)
bash 复制代码
# 删除数据库
dropdb -U postgres your_database_name

# 创建新数据库
createdb -U postgres your_database_name

或者用 pgAdmin 图形界面操作更直观。

4. 其他常见场景

  • 清空后重置序列 :在 TRUNCATE 时加 RESTART IDENTITY,或单独执行 ALTER SEQUENCE seq_name RESTART WITH 1;

  • 释放磁盘空间 :清空后如果空间没释放,可执行:

    sql 复制代码
    VACUUM FULL;

    (会锁表,生产环境慎用;平时用 VACUUM 即可)。

  • 只删除数据不重置序列TRUNCATE ... CONTINUE IDENTITY;(默认行为)。

建议

  • 开发/测试环境:用方法 2(DROP SCHEMA)最方便。
  • 生产环境:强烈建议用方法 1(TRUNCATE),并在事务中测试。
  • 如果数据库很大,TRUNCATE 仍然是最快的清空方式。
相关推荐
广州灵眸科技有限公司4 小时前
xfce桌面触摸校准:基于灵眸科技EASY-EAl-Orin-Nano
数据库·windows·科技
Cloud云卷云舒6 小时前
云卷云舒:从Oracle/MySQL迁移到HaishanDB:迁移评估工具核心技术拆解
mysql·oracle·ai-native·haishandb·信创数据库替换
憧憬成为web高手6 小时前
皮卡丘靶场速通--sql 2
数据库·sql·mybatis
段一凡-华北理工大学7 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
oradh8 小时前
Oracle XTTS实现跨版本迁移和升级(Oracle 11g单库升级至19C RAC集群)
数据库·oracle·11g升级19c·xtts跨版本迁移和升级
z123456789869 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
程序猿DD10 小时前
一个 API Key,统一调用大模型、生图和联网搜索
数据库·网关
java_logo10 小时前
Docker Compose 部署 ClickHouse:快速搭建高性能列式数据库
数据库·clickhouse·docker·列式数据库·轩辕镜像·高性能数据库·clickhouse部署教程
TlSfoward11 小时前
抓包代理链路下的 TLS 指纹变化分析 TLSFOWARD抓包工具
数据库·爬虫·网络协议·搜索引擎·php
数智化管理手记11 小时前
账龄分析手工统计易遗漏?自动账龄分析工具怎么搭建
大数据·网络·数据库·人工智能·数据挖掘