我有一个包含大量表格的数据库。
有没有办法清除表的内容而不为每个表执行此操作!我的意思是迭代数据库表列表并删除其内容。
Thanx的帮助。
答案 0 :(得分:3)
一个简单的数据库函数,它迭代模式中的所有表并清除其内容。 警告:此功能清除所有表格而不询问您是否确定:)请谨慎使用!不保修!
CREATE OR REPLACE FUNCTION clear_tables_in_schema(_schemaname TEXT)RETURNS VOID AS
$$
DECLARE _tablename TEXT;
BEGIN
FOR _tablename IN SELECT tablename FROM pg_catalog.pg_tables WHERE schemaname = _schemaname LOOP
RAISE INFO 'Clearing table %.%', _schemaname, _tablename ;
EXECUTE format('TRUNCATE %I.%I CASCADE;', _schemaname, _tablename);
END LOOP;
IF NOT FOUND THEN
RAISE WARNING 'Schema % does not exist', _schemaname;
END IF;
END;
$$
LANGUAGE plpgsql;
-- Usage:
SELECT clear_tables_in_schema('your_schema');
答案 1 :(得分:0)
类似的东西:
#!/bin/bash
# Save the schema
pg_dump -U user --format plain --schema-only --file db_schema.sql dbname
com="psql -h host -U user -d dbname"
$com <<EOF
DROP TABLE foo;
DROP TABLE bar;
DROP TABLE baz;
# ... more tables here ...
EOF
# Recreate all tables
$com < db_schema.sql