首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >截断Postgres数据库中的所有表

截断Postgres数据库中的所有表
EN

Stack Overflow用户
提问于 2010-05-14 02:04:16
回答 9查看 192.5K关注 0票数 178

在重建之前,我经常需要删除PostgreSQL数据库中的所有数据。如何在SQL中直接执行此操作?

目前,我已经设法想出了一条SQL语句,它返回我需要执行的所有命令:

代码语言:javascript
复制
SELECT 'TRUNCATE TABLE ' ||  tablename || ';' FROM pg_tables WHERE tableowner='MYUSER';

但是一旦我有了它们,我就看不到一种以编程方式执行它们的方法。

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2010-05-14 03:02:36

FrustratedWithFormsDesigner是正确的,PL/pgSQL可以做到这一点。脚本如下:

代码语言:javascript
复制
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;

这将创建一个存储函数(您只需执行一次),然后可以像这样使用它:

代码语言:javascript
复制
SELECT truncate_tables('MYUSER');
票数 261
EN

Stack Overflow用户

发布于 2014-08-05 18:21:54

如果必须这样做,我只需创建当前数据库的模式sql,然后删除和创建数据库,然后使用模式sql加载数据库。

涉及的步骤如下:

1)创建数据库的模式转储(--schema-only)

pg_dump mydb -s > schema.sql

2)删除数据库

drop database mydb;

3)创建数据库

create database mydb;

4)导入模式

psql mydb < schema.sql

票数 44
EN

Stack Overflow用户

发布于 2010-05-14 04:35:44

在这种情况下,最好只有一个空数据库用作模板,当您需要刷新时,删除现有数据库并从模板创建一个新数据库。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2829158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档