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

我试过这个..

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

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

【问题讨论】:

    标签: django postgresql-9.1


    【解决方案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

    它对我有用。

    【讨论】:

      猜你喜欢
      • 2020-04-18
      • 2010-11-27
      • 2018-11-15
      • 2019-03-18
      • 2020-11-21
      • 2012-05-22
      • 1970-01-01
      • 1970-01-01
      • 2011-06-05
      相关资源
      最近更新 更多