错误:关系不存在,在greenplum数据库中



我正在处理PostgreSQL 8.2.15(Greenplum数据库4.2.0 build 1)(HAWQ 1.2.1.0 build 10335)。

我写了一个类似的函数

create or replace function my_function ( 
...
    select exists(select 1 from my_table1 where condition) into result;

我像一样测试它

select my_function(params);

它完全可以工作!

问题是,如果我调用这样的函数

select my_function(params) from my_table2;

Postgres告诉我你错了!

错误:关系"my_table1"不存在(segXX sliceX xx.xx.xx:40003 pid=570406)

  • 这些表和函数在同一个模式中
  • 我可以访问它们
  • 两个名字都是小写

所以,请帮帮我。

我尝试了

  • 将这些表从my_schema移到public
  • 将功能转移到公共
  • 添加模式前缀,如my_schema.my_table1

2015年4月19日编辑

Postgres->Postgres

我试过像一样

select my_function(params) from pg_stat_activity;

没事。

如果像一样编辑该功能

create or replace function my_function ( 
...
    select true into result;

它在任何情况下都可以工作。

在Postgresql中,函数通常在会话的当前搜索路径中运行,因此当您运行函数时,问题可能是架构my_schema不在当前搜索路径上。

您可以通过将函数的声明更改为:来解决问题

create or replace function my_function (...) ... as $$
 ....
$$ language plpgsql set search_path from current;

(我不确定这是否适用于版本8)

如果条款set search_path from current在8.2中不起作用,这里有一个如何在函数中临时设置搜索路径的示例。

最后,我找到了一种方法,虽然不完善,但可以工作。

由于我可以从段访问的表。因此,将该函数作为子查询从段移到段将解决这个问题。

SQL脚本如下:

select t.*, f.* from my_table2 t join (select my_function(params)) f on true;

尽管如此,我们还是欢迎所有的建议。

答案是函数类型。

通过官方文件

http://www.greenplumdba.com/greenplum-dba-faq/whatareimmutablestableandvolatilefunctionsingreenplum

相关内容

  • 没有找到相关文章

最新更新