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)
- 这些表和函数在同一架构中。
- 我可以访问它们。
- 两个名字都是小写的。
所以,请帮助我。
我试过的
- 将这些表从 my_schema 移动到 public
- 将函数移动到 public
- 添加架构前缀,例如 my_schema.my_table1.
编辑于 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
我正在努力 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)
- 这些表和函数在同一架构中。
- 我可以访问它们。
- 两个名字都是小写的。
所以,请帮助我。
我试过的
- 将这些表从 my_schema 移动到 public
- 将函数移动到 public
- 添加架构前缀,例如 my_schema.my_table1.
编辑于 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