在一个命令中删除所有表而不删除 django dbshel​​l 中的 postgres 中的数据库?

Posted

技术标签:

【中文标题】在一个命令中删除所有表而不删除 django dbshel​​l 中的 postgres 中的数据库?【英文标题】:Delete all table without dropping database in postgres in django dbshell in one command? 【发布时间】:2013-11-29 19:38:43 【问题描述】:

我试过这个..

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

但似乎对一个命令不起作用?

【问题讨论】:

【参考方案1】:

如果您的所有表都在一个架构中,则此方法可能有效(以下代码假设您的架构名称为“公共”)

drop schema public cascade;
create schema public;

Drop all tables in PostgreSQL?

更多答案见以上链接

【讨论】:

错误:必须是公共架构的所有者 是的,我做到了,可能语法是正确的,但需要处理某种类型的身份验证....不要什么? 您是否在架构属性窗口中将所有者指定为任何内容? 如果您当前不是超级用户 (postgres),那么最后一步也应该是 ALTER SCHEMA public OWNER TO postgres; 请注意,如果您这样做,那么您创建的所有用户将不再能够访问该架构,并且该用户的所有查询都将失败。您将需要授予用户对架构的访问权限:将架构上的公共使用权限授予 dbuser;您必须是架构的所有者才能执行此操作,因此还要确保您在上面的评论中遵循了 Jay 的建议。【参考方案2】:

运行以下 bash 脚本:

psql -h <pg_host> -p <pg_port> -U <pg_user> <pg_db> -t -c "select 'drop table \"' || tablename || '\" cascade;' from pg_tables where schemaname='public'" | psql -h <pg_host> -p <pg_port> -U <pg_user> <pg_db>

我从这里复制的:http://www.commandlinefu.com/commands/view/12989/postgresql-drop-all-tables-from-a-schema

它对我有用。

【讨论】:

以上是关于在一个命令中删除所有表而不删除 django dbshel​​l 中的 postgres 中的数据库?的主要内容,如果未能解决你的问题,请参考以下文章

删除永久雪花表而不保留故障安全

删除多表而不加入

Django,级联移动到单独的表而不是级联删除

在 CockroachDB 中删除数据库中的所有表

如何在 Django 1.9 中删除 DB (sqlite3) 以从头开始?

如何创建临时表而不丢失 django 中的 ORM?