在 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());
我在 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());