您可能想要CREATE TABLE AS
- 也适用于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;
这将创建一个临时表并将数据复制到其中。请注意,数据的静态快照。它就像一个普通的表,但如果temp_buffers
设置得足够高,它会驻留在 RAM 中。它仅在当前会话中可见,并在会话结束时消失。当用它创建时,ON COMMIT DROP
它会在事务结束时死掉。
临时表首先出现在默认模式搜索路径中,隐藏其他同名的可见表,除非模式限定:
如果你想要动态,你会寻找CREATE VIEW
一个完全不同的故事。
SQL 标准也定义了,Postgres 也支持:SELECT INTO
. 但不鼓励使用它:
最好CREATE TABLE AS
在新代码中用于此目的。
实际上不需要第二个语法变体,SELECT INTO
它用于在 中进行赋值plpgsql
,因此 SQL 语法是不可能的。
有关的:
CREATE TABLE LIKE (...)
只从另一个表复制结构,没有数据:
该LIKE
子句指定一个表,新表会自动从该表中复制所有列名、它们的数据类型和它们的非空约束。
如果您仅出于单个查询的目的需要一个“临时”表(然后丢弃它),那么 CTE 或子查询中的“派生表”的开销要少得多: