PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Nom de table dynamique dans postgreSQL 9.3

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.