postgresql – 如果表已存在,则从选择中创建临时表或插入

创建临时表的最佳方法是什么(如果它尚不存在),并将所选行添加到其中?
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语句(或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)在这种情况下有助于获得实际使用的名称.

相关文章

项目需要,有个数据需要导入,拿到手一开始以为是mysql,结果...
本文小编为大家详细介绍“怎么查看PostgreSQL数据库中所有表...
错误现象问题原因这是在远程连接时pg_hba.conf文件没有配置正...
因本地资源有限,在公共测试环境搭建了PGsql环境,从数据库本...
wamp 环境 这个提示就是说你的版本低于10了。 先打印ph...
psycopg2.OperationalError: SSL SYSCALL error: EOF detect...