S'il vous plaît ne faites pas cela - regardez d'abord attentivement les alternatives, en commençant par partitionnement et exclusion de contraintes .
Si vous devez utiliser des noms de table dynamiques, faites-le au niveau de l'application lors de la génération de la requête.
Si tout le reste échoue, vous pouvez utiliser une procédure PL/PgSQL comme :
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;
Cela ne fonctionnera que si vous avez une table de base qui a la même structure que les sous-tables. Il est également très pénible de travailler avec lorsque vous commencez à ajouter des qualificatifs (contraintes de clause where, etc.), et cela empêche tout type de mise en cache de plan ou d'utilisation efficace d'instructions préparées.