删除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