Du vil sandsynligvis have CREATE TABLE AS
- virker også for 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;
Dette opretter en midlertidig tabel og kopierer data ind i den. Et statisk øjebliksbillede af data, vel at mærke. Det er ligesom en almindelig tabel, men ligger i RAM hvis temp_buffers
er sat højt nok. Den er kun synlig i den aktuelle session og dør i slutningen af det. Når oprettet med ON COMMIT DROP
den dør i slutningen af transaktionen .
Temp-tabeller kommer først i standard skemasøgestien , skjuler andre synlige tabeller med samme navn, medmindre skema-kvalificeret:
- Hvordan påvirker søgestien identifikationsopløsning og det "aktuelle skema"
Hvis du vil have dynamisk , ville du være på udkig efter CREATE VIEW
- en helt anden historie.
SQL-standarden definerer også, og Postgres understøtter også: . Men brugen frarådes:SELECT INTO
Det er bedst at bruge CREATE TABLE AS
til dette formål i ny kode.
Der er virkelig ikke behov for en anden syntaksvariant og SELECT INTO
bruges til tildeling i plpgsql
, hvor SQL-syntaksen derfor ikke er mulig.
Relateret:
- Kombiner to tabeller til en ny, så udvalgte rækker fra den anden ignoreres
- FEJL:inputparametre efter en med en standardværdi skal også have standardindstillinger i Postgres
CREATE TABLE LIKE (...)
kopierer kun strukturen fra en anden tabel og ingen data:
LIKE
klausul specificerer en tabel, hvorfra den nye tabel automatisk kopierer alle kolonnenavne, deres datatyper og deres ikke-null-begrænsninger.
Hvis du har brug for en "midlertidig" tabel kun til formålet med en enkelt forespørgsel (og derefter kassere den) en "afledt tabel" i en CTE eller en underforespørgsel kommer med betydeligt mindre overhead:
- Ændre udførelsesplanen for forespørgslen i postgresql manuelt?
- Kombiner to SELECT-forespørgsler i PostgreSQL
- Genbrug beregnet udvalgsværdi
- Flere CTE i enkelt forespørgsel
- Opdater med resultater af en anden sql