PostgreSQL清空数据库的常用方法

 更新时间:2026年03月18日 08:33:44   作者:亮子AI  
PostgreSQL 中清空一个数据库通常有几种理解和对应方法,具体取决于你的需求,本文通过代码示例给大家介绍了常用的清空方法,需要的朋友可以参考下

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

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

注意事项(非常重要)

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

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

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

方法 A:手动清空单个或多个表

TRUNCATE TABLE table1, table2, table3 RESTART IDENTITY CASCADE;
  • RESTART IDENTITY:同时重置自增序列(序列从 1 开始)。
  • CASCADE:自动清空有外键引用的表(小心使用)。

方法 B:自动清空当前 schema(通常是 public)中的所有表

在 psql 中执行以下脚本:

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 后执行(更灵活):

SELECT 'TRUNCATE TABLE ' || tablename || ' RESTART IDENTITY CASCADE;'
FROM pg_tables 
WHERE schemaname = 'public';

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

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

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

DROP SCHEMA public CASCADE;
CREATE SCHEMA public;

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

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

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

使用 SQL(需要在 postgres 或其他数据库中执行,不能在目标数据库里删自己)

DROP DATABASE IF EXISTS your_database_name;
CREATE DATABASE your_database_name;

使用命令行工具(推荐)

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

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

4. 其他常见场景

  • 清空后重置序列:在 TRUNCATE 时加 RESTART IDENTITY,或单独执行 ALTER SEQUENCE seq_name RESTART WITH 1;
  • 释放磁盘空间:清空后如果空间没释放,可执行:
VACUUM FULL;

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

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

建议

  • 开发/测试环境:用方法 2(DROP SCHEMA)最方便。
  • 生产环境:强烈建议用方法 1(TRUNCATE),并在事务中测试。
  • 如果数据库很大,TRUNCATE 仍然是最快的清空方式。

到此这篇关于PostgreSQL清空数据库的常用方法的文章就介绍到这了,更多相关PostgreSQL清空数据库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • PostgreSQL中实现自增的三种方式举例

    PostgreSQL中实现自增的三种方式举例

    很多小伙伴在把mysql数据库里面的表导入pgsql数据库的时候,会遇到新增数据的时候id不自增,这篇文章主要给大家介绍了关于PostgreSQL中实现自增的三种方式,需要的朋友可以参考下
    2024-02-02
  • PostgreSQL 自动Vacuum配置方式

    PostgreSQL 自动Vacuum配置方式

    这篇文章主要介绍了PostgreSQL 自动Vacuum配置方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • 对PostgreSQL中的慢查询进行分析和优化的操作指南

    对PostgreSQL中的慢查询进行分析和优化的操作指南

    在数据库的世界里,慢查询就像是路上的绊脚石,让数据处理的道路变得崎岖不平,想象一下,你正在高速公路上飞驰,突然遇到一堆减速带,那感觉肯定糟透了,本文介绍了怎样对 PostgreSQL 中的慢查询进行分析和优化,需要的朋友可以参考下
    2024-07-07
  • RuoYi从MySQL迁移到PostgreSQL数据库的踩坑实录

    RuoYi从MySQL迁移到PostgreSQL数据库的踩坑实录

    随着业务发展对数据库性能要求的提升,MySQL迁移至PostgreSQL成为企业级应用的常见需求,下面这篇文章主要介绍了RuoYi从MySQL迁移到PostgreSQL数据库的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2026-02-02
  • Cenots7 离线安装部署PostgreSQL 的详细过程

    Cenots7 离线安装部署PostgreSQL 的详细过程

    这篇文章主要介绍了Cenots7 离线安装部署PostgreSQL 的详细过程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-10-10
  • PostgreSQL 实现sql放入文件批量执行

    PostgreSQL 实现sql放入文件批量执行

    这篇文章主要介绍了PostgreSQL 实现sql放入文件批量执行,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • PostgreSQL云服务器安装配置指南

    PostgreSQL云服务器安装配置指南

    这篇文章主要介绍了PostgreSQL的相关配置,包括安装、基本配置、安全加固等,重点介绍了配置文件调整、远程访问配置、访问控制配置等内容,并强调了连接池和索引优化的重要性,需要的朋友可以参考下
    2026-05-05
  • PostgreSQL 主备数据宕机恢复测试方案

    PostgreSQL 主备数据宕机恢复测试方案

    这篇文章主要介绍了PostgreSQL 主备数据宕机恢复测试方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • PostgreSQL中进行数据导入和导出

    PostgreSQL中进行数据导入和导出

    在PostgreSQL中,数据的导入和导出是数据库管理中不可或缺的操作,通过使用COPYCOPYpg_dump和pg_dumpall等工具,您可以高效地管理您的数据,感兴趣的可以了解一下
    2026-05-05
  • PostgreSQL 10分区表及性能测试报告小结

    PostgreSQL 10分区表及性能测试报告小结

    PostgreSQL的分区表跟先前版本一样,也要先建立主表,然后再建立子表,使用继承的特性,但不需要手工写规则了,目前支持range、list分区,10正式版本发布时不知会不会支持其它方法,感兴趣的朋友跟随小编一起看看吧
    2022-01-01

最新评论