8

私は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はあなたが間違っていると言った!

エラー: リレーション "my_table1" が存在しません (segXX sliceX xx.xx.xx:40003 pid=570406)

  • これらのテーブルと関数は同じスキーマにあります。
  • 私はそれらにアクセスできます。
  • どちらの名前も小文字です。

だから、私を助けてください。

私が試したこと

  • これらのテーブルを my_schema から public に移動します
  • 関数をパブリックに移動
  • my_schema.my_table1 のようなスキーマ プレフィックスを追加します。

2015/04/19 編集

Postgre -> Postgre

そして、私はそれを次のように試しました

select my_function(params) from pg_stat_activity;

大丈夫です。

その関数を次のように編集する場合

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

どんな場合でも機能します。

4

3 に答える 3

0

最後に、完璧ではありませんが機能する方法を見つけました。

セグメントからテーブルにアクセスできるので。したがって、その関数をセグメントからサブクエリとして移動すると、この問題は解決します。

以下のSQLスクリプトが好きです:

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

それでも、すべての提案は大歓迎です。

于 2015-05-29T06:47:22.400 に答える