web-dev-qa-db-ja.com

phpPgAdminを介してPostgreSQLデータベースで言語PL / PythonUを使用する方法は?

私はPgAdminIIIに慣れており、PostgreSQLデータベースで次のようなpython関数を簡単に作成できます。

_CREATE OR REPLACE FUNCTION pyHello (x integer)
RETURNS void AS $$
    if x == 1:
        plpy.notice("Hello World")
$$ LANGUAGE plpythonu VOLATILE;
_

そしてそれは完璧に機能します:

plpythonu in pgadmin3

これで、同じデータベースで同じユーザーを使用してまったく同じクエリを実行すると、phpPgAdminでエラーが発生します。

_ERROR:  syntax error at or near "CREATE"
LINE 1: SELECT COUNT(*) AS total FROM (CREATE OR REPLACE FUNCTION py...
                                       ^
_

これがスクリーンショットです:

plpythonu in phppgadmin

今私は疑問に思っています:

  1. PhpPgAdminを介してPostgreSQLデータベースで言語PL/PythonUを使用する方法は?
  2. PhpPgAdminを介してPL/PythonUを使用することも可能ですか?
  3. クエリをSELECT COUNT(*) FROM (...) AS subクエリでラップするのはなぜですか?

このような:

_SELECT COUNT(*) AS total FROM (CREATE OR REPLACE FUNCTION pyHello (x integer)
RETURNS void AS $$
    if x == 1:
        plpy.notice("Hello World")
$$ LANGUAGE plpythonu VOLATILE) AS sub
_

これは私を少し困惑させ、インターネット上で情報を見つけることができませんでした。言語サポートがデータベースにインストールされていることを理解している限り、このクエリが一方のインターフェイスで機能し、もう一方のインターフェイスでは機能しないのはなぜですか?

ホストはArchLinuxで、次のパッケージバージョンがインストールされています。

  • extra/python2 2.7.9-1
  • extra/postgresql 9.4.1-1
  • コミュニティ/phppgadmin5.1-3
  • コミュニティ/pgadmin31.20.0-1

何か案は?

1
Afr

秘訣は、クエリを実行する前に、ページネーションの結果チェックボックスをオフにすることです。これにより、そのSELECT COUNT(*) ...ラッパーが作成されます。

このチェックボックスを選択しないと、plpythonuクエリの作成は期待どおりに機能します。

Sourceforgeで バグレポート#449 を作成して、これが本当に望ましい動作であるかどうかを確認しました。

2
Afr