postgresql 从所选内容创建临时表,如果表已存在,则插入

2izufjch  于 5个月前  发布在  PostgreSQL
关注(0)|答案(1)|浏览(60)

如何创建一个临时表,如果它不存在,并添加选定的行到它?

mwyxok5s

mwyxok5s1#

CREATE TABLE AS

是最简单、最快捷的方法:

CREATE TEMP TABLE tbl AS
SELECT * FROM tbl WHERE ... ;

字符串
不要将SELECT INTO用于此目的。请参阅:

  • 将合并两个表合并为一个新表,以便忽略另一个表中的选定行

不确定表是否已存在

CREATE TABLE IF NOT EXISTS ...是在Postgres 9.1中添加的。对于旧版本,请参阅:

  • PostgreSQL创建表如果不存在

然后又道:

INSERT INTO tbl (col1, col2, ...)
SELECT col1, col2, ...


如果临时表已经存在,那么很有可能是代码中出现了问题。请确保表中没有重复数据或其他内容。或者考虑以下段落...

唯一名称

临时表只在当前会话中可见(不要与transaction混淆!)。因此表名不能与其他会话冲突。* 如果 * 您需要在会话中使用唯一的名称,您可以使用动态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)用于返回动态创建的表名。

相关问题