平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“PostgreSQL清空数据库的常用做法”来说,它看着像小点,放到项目里常会牵出环境、配置、兼容性和维护成本。下面按实际采用顺序,把思路、关键写法和容易踩坑的地方讲清楚,便于大家直接对照操作。
在这个场景下,PostgreSQL 中“清空一个数据库”通常有几种理解和对应方法,具体取决于你的需求:
TRUNCATE。DROP SCHEMA + CREATE SCHEMA。注意事项(很重要):
TRUNCATE 或 DROP 可能需加 CASCADE。TRUNCATE 比 DELETE 快得多,且立即释放空间。
TRUNCATE TABLE table1, table2, table3 RESTART IDENTITY CASCADE;
RESTART IDENTITY:同时重置自增序列(序列从 1 开始)。CASCADE:自动清空有外键引用的表(小心采用)。在 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';
复制输出结果并执行即可。
最轻松高效的方式是删除同时重建默认 schema(public):
DROP SCHEMA public CASCADE;
CREATE SCHEMA public;
-- 恢复默认权限(推荐加上)
GRANT ALL ON SCHEMA public TO postgres;
GRANT ALL ON SCHEMA public TO public;
这会删除所有表、视图、函数、序列等,数据库本身还在,但已经是空的。
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 图形界面操作更直观。
TRUNCATE 时加 RESTART IDENTITY,或单独执行 ALTER SEQUENCE seq_name RESTART WITH 1;。VACUUM FULL;
理解这一步时,(会锁表,生产环境慎用;平时用 VACUUM 即可)。
TRUNCATE ... CONTINUE IDENTITY;(默认行为)。TRUNCATE 仍然是最快的清空方式。到此这篇关于PostgreSQL清空数据库的常用方法的文章就介绍到这了,更多相关PostgreSQL清空数据库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多兼容脚本之家!