PostgreSQL函数中使用SELECT INTO创建临时表报错原因
问题原因及解决办法
在PostgreSQL中,SELECT ... INTO语法存在两种不同的行为逻辑:
- 在普通SQL语句环境下,它的作用是创建新表(包括临时表)并将查询结果插入其中,这也是你单独执行时能正常运行的原因。
- 但在PL/pgSQL函数内部,
SELECT ... INTO的默认行为是给变量赋值,PostgreSQL会把INTO后面的tTemp识别为一个需要接收数据的变量,而你并没有在函数中声明这个变量,因此会抛出"tTemp" is not a known variable的错误。
解决方法
你可以通过以下两种方式在函数中实现将查询结果存入临时表的需求:
方法1:使用CREATE TEMP TABLE ... AS SELECT语法(推荐)
这是PostgreSQL中创建表并填充数据的标准写法,在函数内不会产生歧义:
DROP TABLE IF EXISTS tTemp; CREATE TEMP TABLE tTemp AS SELECT tt.id, tt.name FROM test.TestTable tt;
方法2:明确指定INTO TABLE关键字
通过添加TABLE关键字,强制PostgreSQL将INTO后面的名称识别为表而非变量:
DROP TABLE IF EXISTS tTemp; SELECT tt.id, tt.name INTO TABLE tTemp FROM test.TestTable tt;
内容的提问来源于stack exchange,提问作者e1s
相关产品推荐
相关产品推荐

