如何從命令行中刪除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;
應該作的伎倆。