在一个命令中删除所有表而不删除 django dbshell 中的 postgres 中的数据库?
Posted
技术标签:
【中文标题】在一个命令中删除所有表而不删除 django dbshell 中的 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 dbshell 中的 postgres 中的数据库?的主要内容,如果未能解决你的问题,请参考以下文章