postgresql - 截断 Postgres 数据库中的所有表

标签 postgresql plpgsql dynamic-sql truncate database-table

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

关于postgresql - 截断 Postgres 数据库中的所有表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2829158/

相关文章:

mysql - Rails 切换数据库

postgresql - plpgsql 函数错误

python - 使用在服务器上运行的 python 脚本和存储过程有什么区别?

sql - 在插入查询中动态选择列名

sql - 关系不存在 PLPGSQL

PostgreSQL:仅在一个数据库中授予 CRUD 操作

python - 如何完全关闭 Flask 和 SQLAlchemy 上的 postgresql 事务空闲?

mysql - 准备好的语句执行,要绑定(bind)的参数数量可变

具有日期范围的 SQL JOIN 表

PostgreSQL 函数遍历查询,如何返回表