CREATE TABLE AS
是最简单,最快捷的方式:
CREATE TEMP TABLE tbl AS SELECT * FROM tbl WHERE ... ;
不确定表是否已存在
CREATE TABLE IF NOT EXISTS ...
是在Postgres 9.1版本中引入的.
对于旧版本,请使用此相关答案中提供的功能:
PostgreSQL create table if not exists
然后:
INSERT INTO tbl (col1,col2,...) SELECT col1,...
如果临时表已经存在,您的代码中可能出现问题.确保您不会在表格中复制数据.或者考虑以下段落……
独特的名字
临时表仅在您当前会话中可见(不要与事务混淆!).因此表名不能与其他会话冲突.
如果在会话中需要唯一的名称,则可以使用动态sql并使用SEQUENCE:
创建一次:
CREATE SEQUENCE tablename_helper_seq;
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)
在这种情况下有助于获得实际使用的名称.
原文地址:https://www.jb51.cc/postgresql/191704.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。