PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Créer des tables temporaires en SQL

Vous voulez probablement CREATE TABLE AS - fonctionne également pour TEMPORARY (TEMP ) tableaux :

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;

Cela crée une table temporaire et y copie des données. Un instantané statique des données, attention. C'est comme une table normale, mais réside dans la RAM si temp_buffers est réglé suffisamment haut. Il n'est visible que dans la session en cours et meurt à la fin. Lorsqu'il est créé avec ON COMMIT DROP il meurt à la fin de la transaction .

Les tables temporaires viennent en premier dans le chemin de recherche de schéma par défaut , masquant les autres tables visibles du même nom à moins qu'elles ne soient qualifiées par le schéma :

  • Comment le search_path influence-t-il la résolution de l'identifiant et le "schéma actuel"

Si vous voulez dynamique , vous recherchez CREATE VIEW - une histoire complètement différente.

Le standard SQL définit également, et Postgres prend également en charge :SELECT INTO . Mais son utilisation est déconseillée :

Il est préférable d'utiliser CREATE TABLE AS à cet effet dans un nouveau code.

Il n'y a vraiment pas besoin d'une deuxième variante de syntaxe, et SELECT INTO est utilisé pour l'affectation dans plpgsql , où la syntaxe SQL n'est par conséquent pas possible.

Connexe :

  • Combiner deux tableaux en un nouveau afin que les lignes sélectionnées de l'autre soient ignorées
  • ERREUR :les paramètres d'entrée après un avec une valeur par défaut doivent également avoir des valeurs par défaut dans Postgres

CREATE TABLE LIKE (...) copie uniquement la structure d'une autre table et aucune donnée :

Le LIKE La clause spécifie une table à partir de laquelle le nouveau tableau copie automatiquement tous les noms de colonne, leurs types de données et leurs contraintes non nulles.

Si vous avez besoin d'une table "temporaire" uniquement dans le cadre d'une seule requête (et que vous la supprimez ensuite), une "table dérivée" dans un CTE ou une sous-requête entraîne considérablement moins de surcharge :

  • Modifier manuellement le plan d'exécution de la requête dans postgresql ?
  • Combiner deux requêtes SELECT dans PostgreSQL
  • Réutiliser la valeur de sélection calculée
  • Plusieurs CTE en une seule requête
  • Mise à jour avec les résultats d'un autre sql