在 HugSQL 中使用自定义函数

Use custom function with HugSQL

我在 macOS 10.12.6 上使用 PostgreSQL 版本 10,想在 HugSQL 可以访问的查询中使用自定义 plpgsql 函数。以下 ansatz 工作正常:

-- :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! 是 运行 时我都在重新定义函数。我试图将函数定义放在输入文件的顶部,但它只会导致编译器异常。

问题:最好的方法是什么?

我找到了解决办法。这里是为了方便其他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());