如果临时表尚不存在,如何创建临时表并将选定的行添加到其中?
最佳答案
CREATE TABLE AS
是最简单最快的方法:
CREATE TEMP TABLE tbl AS
SELECT * FROM tbl WHERE ... ;
不要使用SELECT INTO
。见:
不确定表是否已经存在
CREATE TABLE IF NOT EXISTS ...
在 Postgres 9.1 版本中引入。
对于旧版本,请使用此相关答案中提供的功能:
然后:
INSERT INTO tbl (col1, col2, ...)
SELECT col1, col2, ...
很可能,如果临时表已经存在,您的代码就会出错。确保您没有在表格或其他内容中复制数据。或者考虑以下段落......
独特的名字
临时表仅在当前 session 中可见(不要与事务混淆!)。所以表名不能和其他session冲突。 如果您需要在 session 中使用唯一的名称,您可以使用动态 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)
有助于返回动态创建的表名。
关于postgresql - 如果表已存在,则根据选择创建临时表或插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18850707/