sql >> Base de Datos >  >> RDS >> PostgreSQL

Crear tablas temporales en SQL

Probablemente quieras CREATE TABLE AS - también funciona para TEMPORARY (TEMP ) tablas:

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;

Esto crea una tabla temporal y copia datos en ella. Una instantánea estática de los datos, ojo. Es como una tabla normal, pero reside en la RAM si temp_buffers se establece lo suficientemente alto. Solo es visible dentro de la sesión actual y muere al final de la misma. Cuando se crea con ON COMMIT DROP muere al final de la transacción .

Las tablas temporales aparecen primero en la ruta de búsqueda de esquema predeterminada. , ocultando otras tablas visibles del mismo nombre a menos que estén calificadas para el esquema:

  • ¿Cómo influye search_path en la resolución del identificador y el "esquema actual"?

Si quieres dinámico , estaría buscando CREATE VIEW - una historia completamente diferente.

El estándar SQL también define y Postgres también admite:SELECT INTO . Pero se desaconseja su uso:

Lo mejor es usar CREATE TABLE AS para este propósito en el nuevo código.

Realmente no hay necesidad de una segunda variante de sintaxis, y SELECT INTO se utiliza para la asignación en plpgsql , donde la sintaxis SQL, por lo tanto, no es posible.

Relacionado:

  • Combina dos tablas en una nueva para que las filas seleccionadas de la otra se ignoren
  • ERROR:los parámetros de entrada después de uno con un valor predeterminado también deben tener valores predeterminados en Postgres

CREATE TABLE LIKE (...) solo copia la estructura de otra tabla y sin datos:

El LIKE La cláusula especifica una tabla desde la cual la nueva tabla copia automáticamente todos los nombres de columna, sus tipos de datos y sus restricciones de no nulo.

Si necesita una tabla "temporal" solo con el propósito de una sola consulta (y luego descartarla), una "tabla derivada" en un CTE o una subconsulta viene con una sobrecarga considerablemente menor:

  • ¿Cambiar el plan de ejecución de consulta en postgresql manualmente?
  • Combina dos consultas SELECT en PostgreSQL
  • Reutilizar el valor seleccionado calculado
  • Múltiples CTE en una sola consulta
  • Actualizar con resultados de otro sql