Моля, не правете това - първо разгледайте алтернативите, като започнете с разделяне и изключване на ограничения .
Ако трябва да използвате имена на динамични таблици, направете го на ниво приложение по време на генериране на заявка.
Ако всичко друго се провали, можете да използвате PL/PgSQL процедура като:
CREATE OR REPLACE pleasedont(int year) RETURNS TABLE basetable AS $$
BEGIN
RETURN QUERY EXECUTE format('SELECT col1, col2, col3 FROM %I', 'basetable_'||year);
END;
$$ LANGUAGE plpgsql;
Това ще работи само ако имате базова таблица, която има същата структура като подтаблиците. Освен това е наистина болезнено да се работи с него, когато започнете да добавяте квалификатори (ограничения на клауза where и т.н.) и предотвратява всякакъв вид кеширане на план или ефективно използване на подготвен израз.