2017-12-27 2 views
0

Ich benutze PostgreSQL Version 10 auf MacOS 10.12.6 und möchte eine benutzerdefinierte Plpgsql-Funktion in einer Abfrage verwenden, die für HugSQL zugänglich sein soll. Der folgende Ansatz funktioniert einwandfrei:Verwenden Sie benutzerdefinierte Funktion mit HugSQL

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

Das funktioniert seit HugSQL mir erlaubt mehrzeiligen SQL-Anweisungen zu schreiben, und ich kann die Funktionsdefinition von helper() umfassen.

Allerdings frage ich mich, ob es wirklich effizient ist, dies zu tun, da jetzt ich die Funktion jedes Mal neu definiere, wenn die Abfrage do-something! ausgeführt wird. Ich habe versucht, die Funktionsdefinition an den Anfang der Eingabedatei zu setzen, aber es führte nur zu einer Compiler-Ausnahme.

Frage: Was ist der beste Weg dazu?

Antwort

1

Ich fand eine Lösung. Hier ist es für die Bequemlichkeit anderer Benutzer von HugSQL.

Die Funktion kann in der Migrationsdatei definiert werden, die die Tabellen einrichtet (ich verwende migratus für diesen Zweck). Der Umfang der Funktionsdefinitionen ist auf den Umfang der Tabellen identisch, so dass, wenn die Migration

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

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

liest dann die Funktion helper() in der oben es, ohne zu (re-) zu definieren, bevor gepostet Abfrage verwendet werden, um Verwendung:

-- :name do-something! :! :1 
INSERT INTO SomeTable (someColumn) VALUES (helper()); 
Verwandte Themen