我可以修复功能类型“ RETURNS SETOF”吗?

问题描述

感谢您的阅读。

我使用DBeaver工具来修改pqsql所做的功能

但是,当我修改功能时。 总是,我需要设置返回类型的来源。

例如, 我有一个架构“测试”,然后这是创建sql。 数据类型为“ type_getdata”,函数名称为“ getdata”

CREATE OR REPLACE FUNCTION test.getdata(p_userid "varchar")
    RETURNS SetoF test.type_getdata
    LANGUAGE plpgsql
    VOLATILE
AS $$

然后当我想更改功能时。 我选择“查看功能”按钮。 然后,数据类型丢失。如下所示:

CREATE OR REPLACE FUNCTION test.getdata(p_userid "varchar")
    RETURNS SetoF type_getdata
    LANGUAGE plpgsql
    VOLATILE
AS $$

因此,如果我进行了一些更改,则需要将“ type_getdata”修改为“ test.type_getdata” 有什么办法可以解决这个问题?

谢谢

解决方法

这不是问题,这是Postgres设计。它与返回setof没有任何关系。
登录时,您将获得默认的SEARCH PATH。该设置确定可用模式及其在引用数据库对象且未完全限定时搜索的顺序。发生的情况是TEST模式不在您的搜索路径中,并且您被迫(由Postgtes而不是DBeaver)指定完全限定。要查看您当前的搜索路径,请运行

show search_path; 

您可以在会话级别通过使用set命令进行更改,假设您当前的路径为“ $ user”,public ,则可能需要

set search_path="$user",public,test;

仅在当前会话中持续,请与您的DBA进行永久更改。但是要小心,如果以后有人在PUBLIC中创建type_getdata(或在测试中具有相应名称的任何其他数据库对象),那么您将使用/更改该名称而不是TEST中的那个。
在多模式环境中,最好使用完全限定的名称。即test.getdata(...)就像使用函数名一样。