如何删除所有表而不是 Postgresql 中的模式?
Posted
技术标签:
【中文标题】如何删除所有表而不是 Postgresql 中的模式?【英文标题】:How do I remove all tables and not the schema in Postgresql? 【发布时间】:2015-10-03 00:54:57 【问题描述】:我有一个分配给我的用户 (jason) 的架构。我无法删除架构,因为我没有这样做的权限。 有没有一种很好的方法可以删除架构中的每个表、数据和所有内容,并让它就像我有一个新创建的架构一样。 效果基本一样:
drop schema jason cascade;
create schema jason;
但没有实际删除架构。
【问题讨论】:
我想最好的方法是从 infomration_schema.tables 中生成 DROP TABLE 语句列表,然后一次运行所有这些语句。 【参考方案1】:公认的答案很好,但您可以利用匿名块(PosgreSQL 9.0+)一步完成:
DO $$
DECLARE
r record;
BEGIN
FOR r IN SELECT quote_ident(tablename) AS tablename, quote_ident(schemaname) AS schemaname FROM pg_tables WHERE schemaname = 'public'
LOOP
RAISE INFO 'Dropping table %.%', r.schemaname, r.tablename;
EXECUTE format('DROP TABLE IF EXISTS %I.%I CASCADE', r.schemaname, r.tablename);
END LOOP;
END$$;
【讨论】:
【参考方案2】:从 psql 试试这个:
-- Turn off headers:
\t
-- Use SQL to build SQL:
select 'drop table if exists "' || tablename || '" cascade;'
from pg_tables
where schemaname = 'jason';
-- If the output looks good, write it to a file and run it:
\g out.tmp
\i out.tmp
来自***.com/questions/3327312/drop-all-tables-in-postgresql
【讨论】:
我还想评论一下,这只会创建您需要在此之后运行以删除表的命令集。 是和否,是的,创建命令集并运行它们。以上是关于如何删除所有表而不是 Postgresql 中的模式?的主要内容,如果未能解决你的问题,请参考以下文章
在一个命令中删除所有表而不删除 django dbshell 中的 postgres 中的数据库?
如何确保将 Tkinter 表单中的值输入 MySQL 表而不是收到错误消息?
sql 从数据库中重新加载所有表而不删除MySQL中的数据库
如何从 Laravel 5.1 中的表而不是“用户”表中对用户进行身份验证?