PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Dynamischer Tabellenname in PostgreSQL 9.3

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.