sql >> Database >  >> RDS >> PostgreSQL

Tijdelijke tabellen maken in SQL

U wilt waarschijnlijk CREATE TABLE AS - werkt ook voor TEMPORARY (TEMP ) tabellen:

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;

Hiermee wordt een tijdelijke tabel gemaakt en worden de gegevens erin gekopieerd. Een statische momentopname van de gegevens, let wel. Het is net als een gewone tabel, maar bevindt zich in het RAM als temp_buffers hoog genoeg is ingesteld. Het is alleen zichtbaar binnen de huidige sessie en sterft aan het einde ervan. Indien aangemaakt met ON COMMIT DROP het sterft aan het einde van de transactie .

Tijdelijke tabellen komen eerst in het standaard schema-zoekpad , het verbergen van andere zichtbare tabellen met dezelfde naam, tenzij schema-gekwalificeerd:

  • Hoe beïnvloedt het zoekpad de resolutie van de ID en het "huidige schema"

Als je dynamisch . wilt , zoek je naar CREATE VIEW - een heel ander verhaal.

De SQL-standaard definieert ook, en Postgres ondersteunt ook:SELECT INTO . Maar het gebruik ervan wordt afgeraden:

Het is het beste om CREATE TABLE AS . te gebruiken voor dit doel in nieuwe code.

Er is echt geen behoefte aan een tweede syntaxisvariant, en SELECT INTO wordt gebruikt voor toewijzing in plpgsql , waar de SQL-syntaxis bijgevolg niet mogelijk is.

Gerelateerd:

  • Combineer twee tabellen tot een nieuwe, zodat geselecteerde rijen uit de andere worden genegeerd
  • FOUT:invoerparameters na één met een standaardwaarde moeten ook standaardwaarden hebben in Postgres

CREATE TABLE LIKE (...) kopieert alleen de structuur uit een andere tabel en geen gegevens:

De LIKE clausule specificeert een tabel waaruit de nieuwe tabel automatisch alle kolomnamen, hun gegevenstypen en hun niet-null-beperkingen kopieert.

Als u een "tijdelijke" tabel nodig heeft voor een enkele zoekopdracht (en deze vervolgens weggooit), een "afgeleide tabel" in een CTE of een subquery levert aanzienlijk minder overhead op:

  • Het uitvoeringsplan van de query in postgresql handmatig wijzigen?
  • Combineer twee SELECT-query's in PostgreSQL
  • Berekende selectiewaarde opnieuw gebruiken
  • Meerdere CTE in één zoekopdracht
  • Update met resultaten van een andere sql


  1. Hoe schakel ik MSDTC in op SQL Server?

  2. Wat is PostgreSQL?

  3. JQuery star rating tutorial met php en mysql

  4. Hoe te ontsnappen aan de apostrof (') in MySql?