【发布时间】:2018-06-06 09:24:24
【问题描述】:
是否可以使用通配符截断和级联表?
SELECT format('TRUNCATE TABLE %I CASCADE;', tablename)
FROM pg_tables WHERE tableowner = 'XXX';
【问题讨论】:
标签: database postgresql wildcard truncate cascade
是否可以使用通配符截断和级联表?
SELECT format('TRUNCATE TABLE %I CASCADE;', tablename)
FROM pg_tables WHERE tableowner = 'XXX';
【问题讨论】:
标签: database postgresql wildcard truncate cascade
如果你将它包装在一个匿名代码块中并添加一个循环,你可以:
do $$
declare
tr pg_tables%rowtype;
begin
for tr in
select * from pg_tables WHERE tableowner = 'XXX';
loop
execute format('TRUNCATE TABLE %I.%I CASCADE;', tr.schemaname, tr.tablename);
end loop;
end;
$$;
另外(如上所述),我会添加架构名称,以避免任何潜在的意外后果。
【讨论】:
通过这种方式,您可以获得一个包含所有 table_names 的 TRUNCATE TABLE,然后它们将被一起处理
do $$
declare
names text;
my_sql text;
begin
select string_agg(format('%I.%I', schemaname, tablename), ', ')
into names
from pg_tables
where tableowner = 'XXX';
if names<>'' then
my_sql = 'TRUNCATE TABLE '||names||' CASCADE';
execute my_sql;
end if;
end;
$$;
【讨论】: