如何根据postgres中的数据过滤表格?

时间:2014-07-24 12:14:55

标签: postgresql postgresql-9.2

我正在使用PostgreSQL,其中有1000个表但是只有50个表包含数据,因此我想过滤该表并仅选择那些包含数据的表。

我不知道该怎么做。

2 个答案:

答案 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;

fiddle

答案 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)并实现上述相同的逻辑。

我希望你不介意我不提供代码,这应该让你开始。