我经常需要在重建之前删除PostgreSQL数据库中的所有数据。如何在SQL中直接做到这一点?
目前,我已经设法想出了一个SQL语句,返回我需要执行的所有命令:
SELECT 'TRUNCATE TABLE ' || tablename || ';' FROM pg_tables WHERE tableowner='MYUSER';
但是,一旦我有了它们,我就看不到以编程方式执行它们的方法。
我经常需要在重建之前删除PostgreSQL数据库中的所有数据。如何在SQL中直接做到这一点?
目前,我已经设法想出了一个SQL语句,返回我需要执行的所有命令:
SELECT 'TRUNCATE TABLE ' || tablename || ';' FROM pg_tables WHERE tableowner='MYUSER';
但是,一旦我有了它们,我就看不到以编程方式执行它们的方法。
当前回答
要删除数据并保存pgAdmin中的表结构,您可以这样做:
右键单击database -> backup,选择"Schema only" 删除数据库 创建一个新的数据库,并将其命名为前者 右键单击新数据库->恢复->选择备份,选择“Schema only”
其他回答
伙计们,更好更干净的方法是:
1)创建数据库的模式转储(——Schema -only) Pg_dump mydb -s > schema.sql
2)删除数据库 删除mydb数据库;
3)创建数据库 创建mydb数据库
4)导入模式 PSQL mydb < schema.sql
这是我的工作!
祝你有愉快的一天。 希兰沃克
要删除数据并保存pgAdmin中的表结构,您可以这样做:
右键单击database -> backup,选择"Schema only" 删除数据库 创建一个新的数据库,并将其命名为前者 右键单击新数据库->恢复->选择备份,选择“Schema only”
你也可以用bash这样做:
#!/bin/bash
PGPASSWORD='' psql -h 127.0.0.1 -Upostgres sng --tuples-only --command "SELECT 'TRUNCATE TABLE ' || schemaname || '.' || tablename || ';' FROM pg_tables WHERE schemaname in ('cms_test', 'ids_test', 'logs_test', 'sps_test');" |
tr "\\n" " " |
xargs -I{} psql -h 127.0.0.1 -Upostgres sng --command "{}"
您需要调整模式名称、密码和用户名以匹配您的模式。
在这种情况下,最好使用一个空数据库作为模板,当需要刷新时,删除现有数据库并从模板创建一个新数据库。
清洗AUTO_INCREMENT版本:
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;';
IF EXISTS (
SELECT column_name
FROM information_schema.columns
WHERE table_name=quote_ident(stmt.tablename) and column_name='id'
) THEN
EXECUTE 'ALTER SEQUENCE ' || quote_ident(stmt.tablename) || '_id_seq RESTART WITH 1';
END IF;
END LOOP;
END;
$$ LANGUAGE plpgsql;