Error : relation does not exist, on greenplum database

Error : relation does not exist, on greenplum database

我正在努力 PostgreSQL 8.2.15(Greenplum 数据库 4.2.0 构建 1)(HAWQ 1.2.1.0 构建 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 告诉我你错了!

ERROR: relation "my_table1" does not exist (segXX sliceX xx.xx.xx:40003 pid=570406)

所以,请帮助我。

我试过的


编辑于 2015/04/19

Postgre -> 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 中不起作用,here 如何在函数内临时设置搜索路径的示例。

终于找到了一个方法,虽然不完善但是可以用。

因为我可以在 from 段访问 table。因此,将该函数作为子查询移动到 from 段将解决这个问题。

SQL 脚本如下:

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

不过,欢迎所有建议。

答案是函数类型。

来自官方文档

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