在重建之前,我经常需要删除PostgreSQL数据库中的所有数据。如何在SQL中直接执行此操作?
目前,我已经设法想出了一条SQL语句,它返回我需要执行的所有命令:
SELECT 'TRUNCATE TABLE ' || tablename || ';' FROM pg_tables WHERE tableowner='MYUSER';
但是一旦我有了它们,我就看不到一种以编程方式执行它们的方法。
发布于 2010-05-14 03:02:36
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');
发布于 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
发布于 2010-05-14 04:35:44
在这种情况下,最好只有一个空数据库用作模板,当您需要刷新时,删除现有数据库并从模板创建一个新数据库。
https://stackoverflow.com/questions/2829158
复制相似问题