使用psql客户端版本8.4.20,我创建了这个select命令,它生成了许多其他选择命令:
mydatabase=# select concat('select count(*) from ', table_schema, '.', table_name, ';') from information_schema.tables where table_name like '%stockindex_alias%';
select count(*) from de_de.merged_stockindex_alias_de_de;
select count(*) from en_us.merged_stockindex_alias_en_us;
select count(*) from es_la.merged_stockindex_alias_es_la;
select count(*) from fr_fr.merged_stockindex_alias_fr_fr;
select count(*) from nl_nl.merged_stockindex_alias_nl_nl;
select count(*) from pt_br.merged_stockindex_alias_pt_br;
select count(*) from zh_hk.merged_stockindex_alias_zh_hk;
我知道我可以使用\ g将这七个语句存储到一个文件中,然后用\ i执行该文件。
如何在没有中间文件的单个命令中执行查询结果(那七个语句)?我已经尝试过设置,执行,搜索网络,但无法正确使用。
编辑:之前的选择语句错误地使用了" table"在其中,我已经修复了。
答案 0 :(得分:1)
我不知道它是否适用于8.4;它适用于9.2。
DO $$
DECLARE
x text;
BEGIN
FOR x IN (select concat('select count(*) from ', table_schema, '.', table_name, ';') from information_schema.tables where table_name like '%stockindex_alias%' LOOP
EXECUTE x;
END LOOP;
END;
$$;
基本上,您创建一个匿名功能块并执行它。功能块(或任何正确的名称)允许变量声明和动态执行。
答案 1 :(得分:0)
如果您可以使用近似计数,则可以使用系统目录:
SELECT s.nspname AS locale, c.reltuples AS count
FROM pg_class c
JOIN pg_namespace s ON s.oid = c.relnamespace
WHERE c.relname LIKE '%stockindex_alias%';
在VACUUM ANALYZE
之后(假设您是超级用户或拥有所有受影响的表),这将是最准确的,并且随着受影响的表的修改而逐渐降低准确性。