procedimiento - Creando tablas temporales en SQL
donde se almacenan las tablas temporales sql server (2)
Estoy tratando de crear una tabla temporal que selecciona solo los datos para cierto tipo de register_type
. Escribí esta consulta pero no funciona:
$ CREATE TABLE temp1
(Select
egauge.dataid,
egauge.register_type,
egauge.timestamp_localtime,
egauge.read_value_avg
from rawdata.egauge
where register_type like ''%gen%''
order by dataid, timestamp_localtime ) $
Estoy usando PostgreSQL.
¿Podría decirme qué está mal con la consulta?
Probablemente desee CREATE TABLE AS
- también funciona para tablas TEMPORARY
( TEMP
):
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, téngalo en cuenta. Es como una tabla normal, pero reside en la RAM si temp_buffers
está configurado 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 de temperatura son lo primero en la ruta de búsqueda de esquema predeterminada, ocultando otras tablas visibles del mismo nombre a menos que esté calificado por esquema:
Si quieres dinámica , estarías buscando CREATE VIEW
- una historia completamente diferente.
El estándar SQL también define, y Postgres también admite: . SELECT INTO
Pero su uso no se recomienda :
Lo mejor es usar
CREATE TABLE AS
para este propósito en un código nuevo.
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 no es consecuentemente posible.
Relacionado:
- Combina dos tablas en una nueva para que se ignoren las filas seleccionadas del otro
- ERROR: los parámetros de entrada después de uno con un valor predeterminado también deben tener valores predeterminados
CREATE TABLE LIKE (...)
solo copia la estructura de otra tabla y no contiene datos:
La cláusula
LIKE
especifica una tabla desde la cual la nueva tabla copia automáticamente todos los nombres de columna, sus tipos de datos y sus restricciones no nulas.
Si necesita una tabla "temporal" solo para una sola consulta (y luego descartarla), una "tabla derivada" en una CTE o subconsulta tiene una sobrecarga considerablemente menor:
http://www.postgresql.org/docs/9.2/static/sql-createtable.html
CREATE TEMP TABLE temp1 LIKE ...