Bitte tun Sie dies nicht – suchen Sie zuerst gründlich nach Alternativen, beginnend mit Partitionierung und Einschränkungsausschluss .
Wenn Sie dynamische Tabellennamen verwenden müssen, tun Sie dies während der Abfragegenerierung auf Anwendungsebene.
Wenn alles andere fehlschlägt, können Sie eine PL/PgSQL-Prozedur verwenden wie:
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;
Dies funktioniert nur, wenn Sie eine Basistabelle haben, die dieselbe Struktur wie die Untertabellen hat. Es ist auch sehr mühsam, damit zu arbeiten, wenn Sie anfangen, Qualifizierer hinzuzufügen (Where-Klausel-Einschränkungen usw.), und es verhindert jede Art von Plan-Caching oder die effektive Verwendung vorbereiteter Anweisungen.