如何从命令行中删除PostgreSQL中的全部表? sql
我不想删除数据库自己,只是全部的表格,并在他们全部的数据。 数据库
根据上面的Pablo,就案例而言,从特定模式中删除: ide
select 'drop table "' || tablename || '" cascade;' from pg_tables where schemaname = 'public';
若是您有PL / PGSQL过程语言安装 ,你能够使用下面的无壳/ Perl的外部脚本删除一切。 函数
DROP FUNCTION IF EXISTS remove_all(); CREATE FUNCTION remove_all() RETURNS void AS $$ DECLARE rec RECORD; cmd text; BEGIN cmd := ''; FOR rec IN SELECT 'DROP SEQUENCE ' || quote_ident(n.nspname) || '.' || quote_ident(c.relname) || ' CASCADE;' AS name FROM pg_catalog.pg_class AS c LEFT JOIN pg_catalog.pg_namespace AS n ON n.oid = c.relnamespace WHERE relkind = 'S' AND n.nspname NOT IN ('pg_catalog', 'pg_toast') AND pg_catalog.pg_table_is_visible(c.oid) LOOP cmd := cmd || rec.name; END LOOP; FOR rec IN SELECT 'DROP TABLE ' || quote_ident(n.nspname) || '.' || quote_ident(c.relname) || ' CASCADE;' AS name FROM pg_catalog.pg_class AS c LEFT JOIN pg_catalog.pg_namespace AS n ON n.oid = c.relnamespace WHERE relkind = 'r' AND n.nspname NOT IN ('pg_catalog', 'pg_toast') AND pg_catalog.pg_table_is_visible(c.oid) LOOP cmd := cmd || rec.name; END LOOP; FOR rec IN SELECT 'DROP FUNCTION ' || quote_ident(ns.nspname) || '.' || quote_ident(proname) || '(' || oidvectortypes(proargtypes) || ');' AS name FROM pg_proc INNER JOIN pg_namespace ns ON (pg_proc.pronamespace = ns.oid) WHERE ns.nspname = 'public' ORDER BY proname LOOP cmd := cmd || rec.name; END LOOP; EXECUTE cmd; RETURN; END; $$ LANGUAGE plpgsql; SELECT remove_all();
我建议您将其复制到文件中,而后使用“--file”或“-f”选项将文件做为输入传递给psql,而不是在“psql”提示符下输入: post
psql -f clean_all_pg.sql
信用到期的信用:我编写了函数,但认为查询(或至少第一个)来自几年前其中一个pgsql邮件列表上的某我的。 不记得确切的时间或哪个。 fetch
在Pablo和LenW以后,这里有一个单行程,能够完成全部准备工做,而后执行: spa
psql -U $PGUSER $PGDB -t -c "select 'drop table \\"' || tablename || '\\" cascade;' from pg_tables where schemaname = 'public'" | psql -U $PGUSER $PGDB
命令行
注意:使用您想要的值设置或替换$PGUSER
和$PGDB
code
以防万一...简单的Python脚本清理Postgresql数据库 orm
import psycopg2 import sys # Drop all tables from a given database try: conn = psycopg2.connect("dbname='akcja_miasto' user='postgres' password='postgres'") conn.set_isolation_level(0) except: print "Unable to connect to the database." cur = conn.cursor() try: cur.execute("SELECT table_schema,table_name FROM information_schema.tables WHERE table_schema = 'public' ORDER BY table_schema,table_name") rows = cur.fetchall() for row in rows: print "dropping table: ", row[1] cur.execute("drop table " + row[1] + " cascade") cur.close() conn.close() except: print "Error: ", sys.exc_info()[1]
确保在复制以后缩进是正确的,由于Python依赖它。
drop schema public cascade;
应该作的伎俩。