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

Oprettelse af midlertidige tabeller i SQL

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å:SELECT INTO . Men brugen frarådes:

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


  1. Psychopg2-billede blev ikke fundet

  2. UTL_FILE.FOPEN() procedure accepterer ikke sti til mappe?

  3. mysql_fetch_array, mysql_fetch_assoc, mysql_fetch_object

  4. Sådan konverteres Unix-epoke til et tidsstempel