这是我的查询
SELECT p.table_name
FROM information_schema.tables p
WHERE table_schema='public' and exists(select *from p.table_name)
然后返回
EROR : relation "p.table_name" does not exist
SQL state: 42P01 Character: 107
有人解决这个问题,帮助我。谢谢btw
答案 0 :(得分:1)
此查询没有意义。您不能将可变值用作列或表名 - 因此片段select *from p.table_name
在SQL中不合法。
表的大小(和其他信息)存储在pg_class
表中,因此您可以编写查询:
SELECT relname FROM pg_class c
JOIN pg_namespace n ON c.relnamespace = n.oid
WHERE relkind = 'r' AND n.nspname = 'public'
AND reltuples > 0;
或者您需要动态SQL,其中提到的限制不存在。
DO $$
DECLARE
r RECORD;
is_not_empty boolean;
BEGIN
FOR r IN
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'public'
LOOP
EXECUTE format('SELECT EXISTS(SELECT * FROM public.%I)', r.table_name)
INTO is_not_empty;
IF is_not_empty THEN
RAISE NOTICE '%', r.table_name;
END IF;
END LOOP;
END;
$$;
注意:仅在真正需要时才使用动态SQL 。