将表创建为
这是最简单、最快的方法:
CREATE TEMP TABLE tbl AS
SELECT * FROM tbl WHERE ... ;
不要使用SELECT INTO
.见:
CREATE TABLE IF NOT EXISTS ...
was introduced in version Postgres 9.1.
For older versions, use the function provided in this related answer:
然后:
INSERT INTO tbl (col1, col2, ...)
SELECT col1, col2, ...
如果临时表已经存在,那么代码中可能出现了错误.确保不要在表或其他地方重复数据.或者考虑以下段落…
临时表仅在当前会话中可见(不要与事务混淆!).因此表名不能与其他会话冲突.If如果会话中需要唯一的名称,可以使用动态SQL并使用SEQUENCE
:
创建一次:
CREATE SEQUENCE tablename_helper_seq;
可以使用DO
语句(或plpgsql函数):
DO
$do$
BEGIN
EXECUTE
'CREATE TEMP TABLE tbl' || nextval('tablename_helper_seq'::regclass) || ' AS
SELECT * FROM tbl WHERE ... ';
RAISE NOTICE 'Temporary table created: "tbl%"' || ', lastval();
END
$do$;
lastval()
and currval(regclass)
有助于返回动态创建的表名.