是否可以使用通配符截断和级联表格?
SELECT format('TRUNCATE TABLE %I CASCADE;', tablename)
FROM pg_tables WHERE tableowner = 'XXX';发布于 2017-12-25 04:30:51
如果您将其包装在匿名代码块中并添加一个循环,则可以:
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;
$$;另外(如上所述),我会添加模式名称,以避免任何潜在的意外后果。
发布于 2017-12-25 05:02:34
通过这种方式,您可以获得一个包含所有table_names的截断表,然后将它们一起进行处理
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;
$$;https://stackoverflow.com/questions/47963266
复制相似问题