创建临时表的最佳方法是什么(如果它尚不存在),并将所选行添加到其中?
答案 0 :(得分:22)
CREATE TABLE AS
是最简单,最快捷的方式:
CREATE TEMP TABLE tbl AS
SELECT * FROM tbl WHERE ... ;
CREATE TABLE IF NOT EXISTS ...
对于旧版本,请使用此相关答案中提供的功能:然后:
INSERT INTO tbl (col1, col2, ...)
SELECT col1, col2, ...
如果临时表已经存在,您的代码中可能出现问题。确保您不会在表格中复制数据。或者考虑以下段落......
临时表仅在您当前会话中可见(不要与事务混淆!)。因此表名不能与其他会话冲突
如果您需要在会话中使用唯一名称,则可以使用动态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)
在这种情况下有助于获得实际使用的名称。