sql >> Databasteknik >  >> RDS >> PostgreSQL

Skapa tillfälliga tabeller i SQL

Du vill förmodligen ha CREATE TABLE AS - fungerar även för TEMPORARY (TEMP ) tabeller:

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;

Detta skapar en tillfällig tabell och kopierar data till den. En statisk ögonblicksbild av datan, märk väl. Det är precis som en vanlig tabell, men ligger i RAM-minnet om temp_buffers är tillräckligt högt inställd. Det är bara synligt inom den aktuella sessionen och dör i slutet av det. När skapad med ON COMMIT DROP den dör i slutet av transaktionen .

Temp-tabeller kommer först i schemasökvägen som standard , döljer andra synliga tabeller med samma namn om de inte är schemakvalificerade:

  • Hur påverkar sökvägen identifierarens upplösning och det "aktuella schemat"

Om du vill ha dynamisk , skulle du leta efter CREATE VIEW - en helt annan historia.

SQL-standarden definierar också, och Postgres stöder också:SELECT INTO . Men dess användning avråds:

Det är bäst att använda CREATE TABLE AS för detta ändamål i ny kod.

Det finns egentligen inget behov av en andra syntaxvariant och SELECT INTO används för tilldelning i plpgsql , där SQL-syntaxen följaktligen inte är möjlig.

Relaterat:

  • Kombinera två tabeller till en ny så att valda rader från den andra ignoreras
  • FEL:inmatningsparametrar efter en med ett standardvärde måste också ha standardvärden i Postgres

CREATE TABLE LIKE (...) kopierar bara strukturen från en annan tabell och inga data:

LIKE sats anger en tabell från vilken den nya tabellen automatiskt kopierar alla kolumnnamn, deras datatyper och deras begränsningar som inte är null.

Om du behöver en "tillfällig" tabell bara för en enda fråga (och sedan kassera den) en "härledd tabell" i en CTE eller en underfråga kommer med betydligt mindre overhead:

  • Ändra exekveringsplanen för frågan i postgresql manuellt?
  • Kombinera två SELECT-frågor i PostgreSQL
  • Återanvänd beräknat valvärde
  • Flera CTE i en enda fråga
  • Uppdatera med resultat från en annan sql


  1. Välj Fråga för att hämta rader i MySQL

  2. Skapa en e-postprofil för databas i SQL Server (T-SQL)

  3. PDO-bindningsvärden för MySQL IN-sats

  4. Spara byte[] i en SQL Server-databas från C#