我经常需要在重建之前从我的Postgresql数据库中删除所有数据。我将如何直接在sql中这样做?
目前,我设法提出一个sql语句,返回所有我需要执行的命令:
- SELECT 'TRUNCATE TABLE ' || tablename || ';' FROM pg_tables WHERE tableowner='MYUSER';
但我不能看到一种方式来执行他们的程序化一旦我有他们。
FrustratedWithFormsDesigner是正确的,PL / pgsql可以做到这一点。这里是脚本:
- 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;
这创建了一个存储的函数(你需要这样做只是一次),你可以使用后,像这样:
- SELECT truncate_tables('MYUSER');
HTH!