PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Temporäre Tabellen in SQL erstellen

Sie möchten wahrscheinlich CREATE TABLE AS - funktioniert auch für 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;

Dadurch wird eine temporäre Tabelle erstellt und Daten hineinkopiert. Ein statischer Schnappschuss der Daten wohlgemerkt. Es ist genau wie eine normale Tabelle, befindet sich aber im RAM, wenn temp_buffers hoch genug eingestellt ist. Es ist nur innerhalb der aktuellen Sitzung sichtbar und stirbt am Ende. Bei Erstellung mit ON COMMIT DROP es stirbt am Ende der Transaktion .

Temporäre Tabellen stehen im standardmäßigen Schema-Suchpfad an erster Stelle , wobei andere sichtbare Tabellen desselben Namens ausgeblendet werden, es sei denn, sie sind schemaqualifiziert:

  • Wie beeinflusst der Suchpfad die Identifikatorauflösung und das "aktuelle Schema"

Wenn Sie dynamisch wollen , würden Sie nach CREATE VIEW suchen - eine ganz andere Geschichte.

Der SQL-Standard definiert auch und Postgres unterstützt auch:SELECT INTO . Aber von seiner Verwendung wird abgeraten:

Verwenden Sie am besten CREATE TABLE AS zu diesem Zweck in neuem Code.

Es besteht wirklich keine Notwendigkeit für eine zweite Syntaxvariante und SELECT INTO wird zur Zuweisung in plpgsql verwendet , wo die SQL-Syntax folglich nicht möglich ist.

Verwandte:

  • Zwei Tabellen zu einer neuen kombinieren, sodass ausgewählte Zeilen der anderen ignoriert werden
  • FEHLER:Eingabeparameter nach einem mit einem Standardwert müssen auch Standardwerte in Postgres haben

CREATE TABLE LIKE (...) kopiert nur die Struktur aus einer anderen Tabelle und keine Daten:

Das LIKE -Klausel gibt eine Tabelle an, aus der die neue Tabelle automatisch alle Spaltennamen, ihre Datentypen und ihre Nicht-Null-Einschränkungen kopiert.

Wenn Sie eine "temporäre" Tabelle nur für eine einzelne Abfrage benötigen (und sie dann verwerfen), eine "abgeleitete Tabelle" in einem CTE oder einer Unterabfrage kommt mit deutlich weniger Overhead:

  • Den Ausführungsplan der Abfrage in Postgresql manuell ändern?
  • Zwei SELECT-Abfragen in PostgreSQL kombinieren
  • Berechneten Auswahlwert wiederverwenden
  • Mehrere CTE in einer einzigen Abfrage
  • Mit Ergebnissen einer anderen SQL aktualisieren