因为最近一次在部署环境的时候,需要把测试环境的数据迁移到本地进行调试,需要清空数据库中所有的数据但是保留表结构。
使用 postgres 数据库,在此记录一下
CREATE OR REPLACE FUNCTION truncate_tables(username IN VARCHAR) RETURNS void AS $$ DECLARE statements CURSOR FOR SELECT tablename FROM pg_tables WHERE tableowner = username AND schemaname = 'public'; BEGIN FOR stmt IN statements LOOP EXECUTE 'TRUNCATE TABLE ' || quote_ident(stmt.tablename) || ' CASCADE;'; END LOOP; END; $$ LANGUAGE plpgsql;
上面的函数可以清空 schema 为 public 下的所有表记录同时保留表结构。
按照下面的方式调用即可
SELECT truncate_tables('MYUSER');
需要注意的是,如果你在表结构中使用了枚举值,上面的方法并不会清空枚举值,还是需要你手动清空一下。