我正在努力 PostgreSQL 8.2.15(Greenplum数据库4.2.0版本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)
所以,请帮帮我。
我尝试了什么
2015/04/19编辑
Postgre - > Postgres的
我尝试过像
select my_function(params) from pg_stat_activity;
没关系。
如果编辑该功能
create or replace function my_function (
...
select true into result;
无论如何都可以。
答案 0 :(得分:1)
在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示例如何在函数内临时设置搜索路径。
答案 1 :(得分:0)
最后,我找到了一种方法,但并不完美,但可以发挥作用。
因为我可以从段访问该表。因此,将该函数从段中移动为子查询将解决此问题。
SQL脚本如下:
select t.*, f.* from my_table2 t join (select my_function(params)) f on true;
尽管如此,欢迎提出所有建议。
答案 2 :(得分:0)