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

Creazione di tabelle temporanee in SQL

Probabilmente vuoi CREATE TABLE AS - funziona anche per TEMPORARY (TEMP ) tabelle:

CREATE TEMP TABLE temp1 AS
SELECT dataid
     , register_type
     , timestamp_localtime
     , read_value_avg
FROM   rawdata.egauge
WHERE  register_type LIKE '%gen%'
ORDER  BY dataid, timestamp_localtime;

Questo crea una tabella temporanea e vi copia i dati. Uno istantanea statica dei dati, intendiamoci. È proprio come una normale tabella, ma risiede nella RAM se temp_buffers è impostato sufficientemente alto. È visibile solo all'interno della sessione corrente e alla fine muore. Quando viene creato con ON COMMIT DROP muore alla fine della transazione .

Le tabelle temporanee vengono prima nel percorso di ricerca dello schema predefinito , nascondendo altre tabelle visibili con lo stesso nome a meno che non siano qualificate per lo schema:

  • In che modo il percorso_ricerca influenza la risoluzione dell'identificatore e lo "schema corrente"

Se vuoi dinamico , cercherai CREATE VIEW - una storia completamente diversa.

Lo standard SQL definisce anche e Postgres supporta anche:SELECT INTO . Ma il suo utilizzo è sconsigliato:

È meglio usare CREATE TABLE AS a questo scopo nel nuovo codice.

Non c'è davvero bisogno di una seconda variante di sintassi e SELECT INTO viene utilizzato per l'assegnazione in plpgsql , dove la sintassi SQL di conseguenza non è possibile.

Correlati:

  • Combina due tabelle in una nuova in modo che le righe selezionate dall'altra vengano ignorate
  • ERRORE:i parametri inseriti dopo uno con un valore predefinito devono avere valori predefiniti anche in Postgres

CREATE TABLE LIKE (...) copia solo la struttura da un'altra tabella e nessun dato:

Il LIKE La clausola specifica una tabella da cui la nuova tabella copia automaticamente tutti i nomi di colonna, i relativi tipi di dati e i relativi vincoli non nulli.

Se hai bisogno di una tabella "temporanea" solo ai fini di una singola query (e poi scartala) una "tabella derivata" in un CTE o una sottoquery ha un sovraccarico notevolmente inferiore:

  • Cambiare manualmente il piano di esecuzione della query in postgresql?
  • Combina due query SELECT in PostgreSQL
  • Riutilizza il valore selezionato calcolato
  • Più CTE in un'unica query
  • Aggiorna con i risultati di un altro sql