1

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

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

4

1 回答 1

2

我找到了解决方案。这里是为了方便 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());
于 2018-02-09T12:41:42.190 回答