postgresql - Postgres过程中的临时表
问题描述
我正在尝试在一个过程中创建和填充一个临时表,以保存我正在使用的数据的一些中间状态。
我创建了一个示例代码来解释我想要做什么:
CREATE OR REPLACE PROCEDURE etl.my_test_procedure()
LANGUAGE sql
AS
$$
CREATE TEMP TABLE IF NOT EXISTS my_temp(
var1 VARCHAR(255),
var2 VARCHAR(255)
) ON COMMIT DROP;
INSERT INTO my_temp (
var1,
var2
)
SELECT
table_schema,
column_name
FROM information_schema.columns;
SELECT
*
FROM my_temp
$$
尝试创建此存储过程时,数据库返回此错误消息: 错误:关系“my_temp”不存在第 10 行:插入到 my_temp(^ SQL 状态:42P01 字符:171
PD:我的 Postgres 版本是 13.3
解决方案
你将不得不使用plpgsql
而不是sql
CREATE OR REPLACE FUNCTION my_test_procedure()
RETURNS TABLE(var1 VARCHAR(255), var2 VARCHAR(255))
AS
$$
DECLARE
BEGIN
CREATE TEMP TABLE IF NOT EXISTS my_temp(
var1 VARCHAR(255),
var2 VARCHAR(255)
) ON COMMIT DROP;
INSERT INTO my_temp (
var1,
var2
)
SELECT
table_schema,
column_name
FROM information_schema.columns;
RETURN QUERY SELECT *
FROM my_temp;
END;
$$ LANGUAGE plpgsql;
推荐阅读
- angular - 按内部 *ngFor 中的属性对整个 *ngFor 进行排序
- python - 如何处理在不同机器(路径)上处理一个项目?
- python - 使用 Zenpy 遍历带有列表的 API 时遇到问题
- python - 使用 tokenize.detect_encoding() 时出现“TypeError:对象不可调用”
- jquery - 响应式导航栏下拉菜单仅在悬停时打开而不是单击
- javascript - 防止 Showdown 修改某些分隔符之间的文本
- java - 安卓应用无法卸载。它不断使应用程序管理器崩溃
- python - 如何让cherrypy从索引和静态目录中提供静态文件,以及自定义路径?
- c# - C# 用 Char* 正确处理结构
- sql - 具有异或的左连接表