如何删除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;

应该作的伎俩。

相关文章
相关标签/搜索