PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Nome tabella dinamica in postgreSQL 9.3

Per favore non farlo:guarda prima le alternative, iniziando con partizionamento ed esclusione di vincoli .

Se devi utilizzare nomi di tabelle dinamici, fallo a livello di applicazione durante la generazione della query.

Se tutto il resto fallisce puoi usare una procedura PL/PgSQL come:

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;

Funzionerà solo se hai una tabella di base che ha la stessa struttura delle sottotabelle. È anche molto doloroso lavorare con quando inizi ad aggiungere qualificatori (dove vincoli di clausola, ecc.) e impedisce qualsiasi tipo di memorizzazione nella cache del piano o uso efficace delle istruzioni preparate.