删除PostgreSQL中的所有表?

如何从命令行删除PostgreSQL中的所有表?

不想删除数据库本身,只是所有的表格,并在他们所有的数据。


如果你所有的表都在一个模式中,这种方法可以工作(下面的代码假定你的模式名是public

DROP SCHEMA public CASCADE;
CREATE SCHEMA public;

如果您使用的是PostgreSQL 9.3或更高版本,您可能还需要恢复默认授权。

GRANT ALL ON SCHEMA public TO postgres;
GRANT ALL ON SCHEMA public TO public;

你可以编写一个查询来生成如下的SQL脚本:

select 'drop table "' || tablename || '" cascade;' from pg_tables;

要么:

select 'drop table if exists "' || tablename || '" cascade;' from pg_tables;

如果前一句话中某些表由于级联选项而自动丢弃。

另外,如注释中所述,您可能需要按模式名称过滤要删除的表:

select 'drop table if exists "' || tablename || '" cascade;' 
  from pg_tables
 where schemaname = 'public'; -- or any other schema

然后运行它。

光荣的COPY + PASTE也将起作用。


撰写本文(2014年1月)时最为接受的答案是:

drop schema public cascade;
create schema public;

这确实奏效,但是如果你的意图是将公共架构恢复到处女状态,这并不能完全完成任务。 在PostgreSQL 9.3.1的pgAdmin III下,如果你点击这种方式创建的“公共”模式并查看“SQL窗格”,你会看到以下内容:

-- Schema: public

-- DROP SCHEMA public;

CREATE SCHEMA public
  AUTHORIZATION postgres;

但是,相比之下,全新的数据库将具有以下内容:

-- Schema: public

-- DROP SCHEMA public;

CREATE SCHEMA public
  AUTHORIZATION postgres;

GRANT ALL ON SCHEMA public TO postgres;
GRANT ALL ON SCHEMA public TO public;
COMMENT ON SCHEMA public
  IS 'standard public schema';

对于我使用创建数据库表(web2py)的python web框架,使用前者会导致问题:

<class 'psycopg2.ProgrammingError'> no schema has been selected to create in 

所以在我看来,完全正确的答案是:

DROP SCHEMA public CASCADE;
CREATE SCHEMA public;
GRANT ALL ON SCHEMA public TO postgres;
GRANT ALL ON SCHEMA public TO public;
COMMENT ON SCHEMA public IS 'standard public schema';

(也请注意从pgAdmin III发布这些命令,我​​去了Plugins-> PSQL Console)

链接地址: http://www.djcxy.com/p/25501.html

上一篇: Drop all tables in PostgreSQL?

下一篇: Show tables in PostgreSQL