2017-12-27 15 views
0

私は、MacOS 10.12.6でPostgreSQLバージョン10を使用しており、HugSQLにアクセス可能なクエリでカスタムplpgsql関数を使用したいと考えています。次ansatzが正常に動作しますHugSQLでカスタム関数を使用する

-- :name do-something! :! :1 
CREATE OR REPLACE FUNCTION helper() 
    ... (function body of helper) 
    LANGUAGE plpgsql; 
INSERT INTO SomeTable (someColumn) VALUES (helper()); 

HugSQL私は複数行のSQL文を記述することができますし、私はhelper()の関数定義を含めることができますので、これは動作します。

しかし、実際に効率的かどうかは今、クエリdo-something!が実行されるたびに関数を再定義しているからです。関数定義を入力ファイルの先頭に置こうとしましたが、コンパイラの例外が発生しました。

質問:これにはどのような方法が最適ですか?

答えて

1

解決策が見つかりました。ここでは、HugSQLの他のユーザーの便宜のためです。

この機能は、テーブルを設定する移行ファイルで定義できます(この目的ではmigratusを使用しています)。移行が

CREATE OR REPLACE FUNCTION helper() 
    ... (function body of helper) 
    LANGUAGE plpqsql; 

CREATE TABLE IF NOT EXISTS SomeTable 
    (...row definitions); 

を読み取る場合、関数helper()をすることなく、上に掲載したクエリに使用することができる(再)は、前に定義して関数定義の範囲は、テーブルの範囲と同一であります用法:

-- :name do-something! :! :1 
INSERT INTO SomeTable (someColumn) VALUES (helper()); 
関連する問題