postgresql - 在这种情况下有什么问题,因为从 postgres 函数返回自定义类型集
问题描述
我的表结构是
CREATE TABLE dev.clbk_logs
(
id bigint NOT NULL,
clbk_typ character varying(255) COLLATE pg_catalog."default",
clbk_json json,
cre_dte timestamp without time zone,
ld_id bigint,
ld_num character varying(255) COLLATE pg_catalog."default",
mod_dte timestamp without time zone,
CONSTRAINT clbk_logs_pkey PRIMARY KEY (id)
)
WITH (
OIDS = FALSE
)
我的存储过程如下
CREATE OR REPLACE FUNCTION dev.get_ranged_loads(p_callback_types TEXT[],p_loads TEXT[], p_days_ago_1 INT, p_days_ago_2 INT)
RETURNS table(
clbk_json json,
ld_id character varying,
ld_num character varying,
days_ago int)
AS $BODY$
BEGIN
return query
SELECT a.clbk_json,a.ld_id,a.ld_num,(current_date - a.cre_dte::date) as _days_ago
FROM dev.clbk_logs a
WHERE exists (
SELECT * from json_array_elements_text(a.clbk_json -> 'ReferenceNumbers') as x(item)
WHERE x.item = any(p_loads)
AND a.clbk_typ = any(p_callback_types)
AND ((current_date - a.cre_dte::date)=p_days_ago_1 OR (current_date - a.cre_dte::date)<p_days_ago_2)
) order by a.cre_dte desc;
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
目前这给了我一个错误
错误:无法更改现有函数的返回类型详细信息:OUT 参数定义的行类型不同。提示:首先使用 DROP FUNCTION dev.get_ranged_loads(text[],text[],integer,integer)。SQL 状态:42P13
上面的代码出了什么问题
我期待结果集为
|---------|---------|------------|----------------|----------------|----------------|----------------|------------|
| id |clbk_typ |clbk_json |cre_dte | ld_id |ld_num |mod_dte |days_ago |
|---------|---------|------------|----------------|----------------|----------------|----------------|------------|
| 1172 |ADD | {} | 0 | 12 | | | |
| 1172 |UPDATE | {} | 40 | 45 | | | |
提前致谢
解决方案
错误信息非常清楚。您不能更改返回类型。跑:
DROP FUNCTION dev.get_ranged_loads(TEXT[],TEXT[],INT,INT);
然后你就可以CREATE OR REPLACE
像往常一样运行了。
推荐阅读
- c++11 - ZeroMQ 服务器客户端启动顺序
- python - 测试功能为 Click 命令时 pytest 失败
- c# - 无法使用配置文件设置解决依赖关系
- sql-server - 对 Unicode 分隔符的批量插入支持
- c - 在“C”中的句子中交换单词
- scala - 如何使用 scala 模拟 Spark DataFrameReader?
- django - Celery 任务在从大型数据库中提取数据时中途失败
- google-analytics - Google Analytics Reporting API - 使用用户 ID 获取活动
- android - 观察没有 LifecycleOwner 参考的 Room 表
- java - POM 打包选项 jar 到战争变更错误