CREATEFUNCTION remove_all() RETURNS void AS $$ DECLARE rec RECORD; cmd text; BEGIN cmd :='';
FOR rec INSELECT 'DROP SEQUENCE '|| quote_ident(n.nspname) ||'.' || quote_ident(c.relname) ||' CASCADE;'AS name FROM pg_catalog.pg_class AS c LEFTJOIN pg_catalog.pg_namespace AS n ON n.oid = c.relnamespace WHERE relkind ='S'AND n.nspname NOTIN ('pg_catalog', 'pg_toast') AND pg_catalog.pg_table_is_visible(c.oid) LOOP cmd := cmd || rec.name; END LOOP;
FOR rec INSELECT 'DROP TABLE '|| quote_ident(n.nspname) ||'.' || quote_ident(c.relname) ||' CASCADE;'AS name FROM pg_catalog.pg_class AS c LEFTJOIN pg_catalog.pg_namespace AS n ON n.oid = c.relnamespace WHERE relkind ='r'AND n.nspname NOTIN ('pg_catalog', 'pg_toast') AND pg_catalog.pg_table_is_visible(c.oid) LOOP cmd := cmd || rec.name; END LOOP;
FOR rec INSELECT 'DROP FUNCTION '|| quote_ident(ns.nspname) ||'.' || quote_ident(proname) ||'('|| oidvectortypes(proargtypes) ||');'AS name FROM pg_proc INNERJOIN pg_namespace ns ON (pg_proc.pronamespace = ns.oid) WHERE ns.nspname = 'public' ORDERBY proname LOOP cmd := cmd || rec.name; END LOOP;
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]
核心代码
以下是一个通用的删除当前模式下所有表的代码:
1 2 3 4 5 6 7
DO $$ DECLARE r RECORD; BEGIN FOR r IN (SELECT tablename FROM pg_tables WHERE schemaname =current_schema()) LOOP EXECUTE'DROP TABLE IF EXISTS '|| quote_ident(r.tablename) ||' CASCADE'; END LOOP; END $$;