SELECT relname AS table_name,reltuples::bigint
FROM pg_class
WHERE relkind = 'r'
AND relname NOT LIKE 'pg_%'
AND relname NOT LIKE 'sql_%'
AND relname NOT LIKE 'qrtz_%'
AND relname NOT LIKE 'information%' AND reltuples = 0;
这是一个查询PostgreSQL数据库中空表的SQL语句。具体分析如下:
1. 使用`pg_class`系统表。
在这个SQL语句中,使用了PostgreSQL自带的`pg_class`系统表来查询表信息。该表包含了所有可访问的数据库对象的信息,如表、索引、序列等。其中,`relname`表示表名,`relkind`表示对象类型,`reltuples`表示行数(对于表而言)或元组数(对于其他对象而言)。
2. 筛选条件。
通过`WHERE`子句添加筛选条件,仅返回普通表(即`relkind=r`)、非系统表(即`relname NOT LIKE 'pg_%'`和`relname NOT LIKE 'sql_%'`)和非特定表(即`relname NOT LIKE 'qrtz_%'`和`relname NOT LIKE 'information%'`)的信息。同时,还添加了一个额外的条件,即`reltuples=0`,用于筛选出行数为0的空表。
3. 查询结果。
最终,查询结果包含两列:`table_name`表示表名,`reltuples::bigint`表示行数(由于该列的数据类型为实型,需要通过显示转换为长整型)。这些列信息将被返回给客户端以供查看。