Используйте пользовательскую функцию с HugSQL
Я использую PostgreSQL версии 10 в macOS 10.12.6 и хотел бы использовать пользовательскую функцию plpgsql в запросе, который должен быть доступен для 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());