我的数据库中有一堆表。我需要截断所有表而不是一些表。
所以通过使用table_schema我可以得到表名列表!
select ''as "truncate", table_name
from information_schema.tables
where table_schema = 'public'
预期产出。
truncate table table_name restart identity.
有人告诉我有没有更好的方法来做到这一点。
答案 0 :(得分:3)
将format()
与占位符一起用于架构和表名,以确保正确引用名称:
要正确处理表使用的外键,最好将cascade
选项添加到truncate
命令:
select format('truncate table %I.%I restart identity cascade;', table_schema, table_name) as stmt
from information_schema.tables
where table_schema = 'public';
另一种选择是截断单个语句中的所有表:
select concat('truncate table ', string_agg(format('%I.%I', table_schema, table_name), ', '), ' restart identity;') as stmt
from information_schema.tables
where table_schema = 'public'
答案 1 :(得分:0)
您可以使用concat
||
个字符串
select 'truncate table' || table_name::text || ' restart identity'
from information_schema.tables
where table_schema = 'public