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: . Aber von seiner Verwendung wird abgeraten:SELECT INTO
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