如何创建一个临时表,如果它不存在的话,并将选定的行添加到其中?
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, ...
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()
和currval(regclass)
对于返回动态创建的表名至关重要。
create table .. if not exists
。 - user330315