Por favor, não faça isso - procure primeiro as alternativas, começando com particionamento e exclusão de restrição .
Se você precisar usar nomes de tabelas dinâmicas, faça-o no nível do aplicativo durante a geração da consulta.
Se tudo mais falhar, você pode usar um procedimento PL/PgSQL como:
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;
Isso só funcionará se você tiver uma tabela base que tenha a mesma estrutura das subtabelas. Também é muito doloroso trabalhar com ele quando você começa a adicionar qualificadores (restrições de cláusula where, etc.) e impede qualquer tipo de cache de plano ou uso de instrução preparada eficaz.