use*_*850 49 sql postgresql temp-tables
我正在尝试创建一个临时表,只选择某个数据register_type.我写了这个查询,但它不起作用:
$ 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 ) $
Run Code Online (Sandbox Code Playgroud)
我正在使用PostgreSQL.
你能告诉我查询有什么问题吗?
Erw*_*ter 92
你可能想要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_localtimeRun Code Online (Sandbox Code Playgroud)
这将创建一个临时表并将数据复制到其中.请注意,数据的静态快照.它就像一个常规表,但如果temp_buffers设置得足够高,则驻留在RAM中,只在当前会话中可见,并在它结束时死掉.在创建时,ON COMMIT DROP它会在事务结束时死掉.
临时表首先出现在默认模式搜索路径中,隐藏其他可见的同名表,除非符合模式:
如果你想要动态,你会寻找CREATE VIEW- 一个完全不同的故事.
SQL标准也定义了,Postgres也支持:.SELECT INTO
但不鼓励使用它:
最好
CREATE TABLE AS在新代码中用于此目的.
实际上不需要第二种语法变体,并且SELECT INTO用于赋值plpgsql,因此SQL语法是不可能的.
有关:
CREATE TABLE LIKE (...)仅复制另一个表中的结构而没有数据:
该
LIKE子句指定一个表,新表从该表自动复制所有列名,其数据类型及其非空约束.
如果您只需要一个"临时"表来进行单个查询(然后丢弃它),CTE或子查询中的"派生表"就会带来相当少的开销:
http://www.postgresql.org/docs/9.2/static/sql-createtable.html
CREATE TEMP TABLE temp1 LIKE ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
78721 次 |
| 最近记录: |