我正在使用PostgreSQL,其中有1000个表但是只有50个表包含数据,因此我想过滤该表并仅选择那些包含数据的表。
我不知道该怎么做。
答案 0 :(得分:2)
您可以使用信息模式,但请务必首先对数据库进行VACUUM(在示例中我创建索引以强制更新);
SELECT t.tablename, c.reltuples from pg_tables t
JOIN pg_class c
ON c.relname = t.tablename
WHERE SCHEMANAME = 'public'
AND reltuples > 0;
答案 1 :(得分:2)
这是查找所有表名的SQL查询:
SELECT tablename FROM pg_tables WHERE schemaname = 'public'
这是返回表中行数的SQL:
SELECT COUNT(*) FROM table
其中table
是表的名称。你想要结合这些。有几种方法:
1)在PL/pgSQL中编写存储过程。基本上,您必须循环遍历SELECT tablename...
查询的结果,并且对于每个表名,使用EXECUTE
语句构造相应的第二个查询(详细信息为here)。
2)使用您喜欢的编程语言提供的PostgreSQL客户端库(例如Python的Psycopg2)并实现上述相同的逻辑。
我希望你不介意我不提供代码,这应该让你开始。