在重建之前,我经常需要从我的 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');