Этот запрос не имеет смысла.Нельзя использовать изменяемое значение в качестве имени столбца или таблицы - поэтому фрагмент select *from p.table_name
недопустим в SQL.
Размеры таблиц (и другая информация) хранятся в таблице pg_class
, поэтому вы можете написатьquery:
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 только тогда, когда он действительно нужен ,