如何刪除PostgreSQL數據庫中的全部表?

如何從命令行中刪除PostgreSQL中的全部表? sql

不想刪除數據庫自己,只是全部的表格,並在他們全部的數據。 數據庫


#1樓

根據上面的Pablo,就案例而言,從特定模式中刪除: ide

select 'drop table "' || tablename || '" cascade;' 
from pg_tables where schemaname = 'public';

#2樓

若是您有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


#3樓

在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


#4樓

以防萬一...簡單的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依賴它。


#5樓

drop schema public cascade;

應該作的伎倆。

相關文章
相關標籤/搜索