EDITAR: Dejo la respuesta original aceptada tal como está, pero tenga en cuenta que la edición a continuación, como lo sugiere a_horse_with_no_name, es el método preferido para crear una tabla temporal usando VALUES.
Si solo desea seleccionar algunos valores, en lugar de simplemente crear una tabla e insertarla, puede hacer algo como:
WITH vals (k,v) AS (VALUES (0,-9999), (1, 100))
SELECT * FROM vals;
Para crear una tabla temporal de manera similar, use:
WITH vals (k,v) AS (VALUES (0,-9999), (1, 100))
SELECT * INTO temporary table temp_table FROM vals;
EDITAR: Como lo señala a_horse_with_no_name, en los documentos dice que CREATE TABLE AS...
es funcionalmente similar a SELECT INTO ...
, pero que el primero es un superconjunto del último y que SELECT INTO
se usa en plpgslq para asignar un valor a una variable temporal, por lo que fallará en Ese caso. Por lo tanto, si bien los ejemplos anteriores son válidos para SQL simple, se CREATE TABLE
debe preferir la forma.
CREATE TEMP TABLE temp_table AS
WITH t (k, v) AS (
VALUES
(0::int,-99999::numeric),
(1::int,100::numeric)
)
SELECT * FROM t;
Tenga en cuenta, también de los comentarios de a_horse_with_no_name, y en la pregunta original del OP, esto incluye una conversión a los tipos de datos correctos dentro de la lista de valores y utiliza una instrucción CTE (WITH).
Además, como se señala en la respuesta de Evan Carrol, una consulta CTE es una valla de optimización , es decir, el CTE siempre se materializa. Hay muchas buenas razones para usar CTE, pero puede haber un impacto en el rendimiento bastante significativo, si no se usa con cuidado. Sin embargo, hay muchos casos en los que la cerca de optimización puede mejorar el rendimiento, por lo que es algo a tener en cuenta, no evitar a ciegas.