如何删除名称以doors_?开头的所有表格?我可以使用drop table命令执行某种正则表达式吗?
我不喜欢编写自定义脚本,但欢迎所有解决方案.谢谢!
此脚本将生成DDL命令以将其全部删除:
SELECT 'DROP TABLE ' || t.oid::regclass || ';'
FROM pg_class t
-- JOIN pg_namespace n ON n.oid = t.relnamespace -- to select by schema
WHERE t.relkind = 'r'
AND t.relname ~~ E'doors\_%' -- enter search term for table here
-- AND n.nspname ~~ '%myschema%' -- optionally select by schema(s), too
ORDER BY 1;
Run Code Online (Sandbox Code Playgroud)
强制转换t.oid::regclass使语法也适用于表名中的混合大小写标识符,保留字或特殊字符.它还可以防止SQL注入,并在必要时预先设置模式名称.有关手册中对象标识符类型的更多信息.
你也可以自动删除,但是在你做之前不检查你实际删除的内容是不明智的.
您可以CASCADE根据对象(视图和引用外键)将每个语句附加到DROP.但是,除非你非常清楚自己在做什么,否则这是不明智的.外键约束没有大的损失,但这也将完全放弃所有依赖的视图.没有CASCADE您收到错误消息,通知您哪些对象阻止您丢弃表.然后你可以处理它.
我通常使用一个查询根据一些元数据表为我生成DDL命令,然后手动运行这些命令.例如:
SELECT 'DROP TABLE ' || tablename || ';' FROM pg_tables
WHERE tablename LIKE 'prefix%' AND schemaname = 'public';
Run Code Online (Sandbox Code Playgroud)
这将返回一堆DROP TABLE xxx;查询,我只需将其复制并粘贴到控制台即可.虽然您可以添加一些代码来自动执行它们,但我更喜欢自己运行它们.
| 归档时间: |
|
| 查看次数: |
6145 次 |
| 最近记录: |