如何在Azure Data Studio中操作PostgreSQL临时表并解决SELECT INTO报错
问题原因
Azure PostgreSQL的运行规则会拦截歧义语法:SELECT ... INTO 在PostgreSQL中存在两种语义,一是在标准SQL上下文创建新表,二是在PL/pgSQL代码块中给变量赋值,为了避免非预期操作,默认会禁止未明确指定表类型的SELECT ... INTO创建表语句,就会触发你遇到的报错:
SELECT ... INTO is not allowed here
解决方案
方案1:使用兼容性更高的CREATE TABLE AS语法(推荐)
该语法没有歧义,在所有PostgreSQL运行环境中都可以正常执行,创建临时表的写法如下:
CREATE TEMP TABLE temptable AS SELECT * FROM act_hi_taskinst;
如果需要创建永久表,去掉语句中的TEMP关键字即可。
方案2:保留SELECT INTO语法,明确指定表类型
在语句中添加TEMP TABLE声明,消除语法歧义即可通过校验:
SELECT * INTO TEMP TABLE temptable FROM act_hi_taskinst;
注意事项
- 加
TEMP关键字创建的表为会话级临时表,仅当前数据库连接会话可见,会话断开后会自动删除,符合临时表的常规使用需求。 - 执行建表操作前请确认当前数据库账号拥有对应 schema 的建表权限。
内容的提问来源于stack exchange,提问作者Henrique Mauri
相关产品推荐
相关产品推荐

