【发布时间】:2021-02-10 23:03:24
【问题描述】:
我正在设计 node + postgres web 服务,我需要对 3 个表进行 3 次插入。我应该在节点后端代码中执行 3 个单独的插入查询,还是实现 postresql 函数。
例子:
insert into users(id, name, address) values (1, 'username', 'address') returning id as userid;
insert into company(id, contactPersonId, name) values (11, 1, 'Companyname) returning id as companyid;
insert into report(id, userid, companyid) values (111,1,11);
或者用一个函数:
create or replace function add_report_details(userid, username, address, companyid, companyname, reportid)
....
insert into users(id, name, address) values (1, 'username', 'address') returning id as userid;
insert into company(id, contactPersonId, name) values (11, 1, 'Companyname') returning id as companyid;
insert into report(id, userid, companyid) values (111,1,11);
....
用函数实现它似乎是更好的选择,因为这样我就不必在表结构发生变化或我想实现一些附加功能时将插入查询更改为代码中的多个位置。
使用函数还有其他好处吗?或者有其他方法可以处理这个问题吗?
编辑: 我从中得出的结论是,为了可读性和可维护性,最好将插入查询保留在 js 函数中。 然而,更复杂的解决方案可能与数据库有更多的关系,因此在这种情况下,函数/过程可能是首选方法。
如果您决定使用函数,还需要考虑以下几点:How to insert data into table using stored procedures in postgresql
如果您对在代码中使用 sql 函数而不是查询有任何其他建议或意见,请在下面发表评论。我觉得这是很常见的问题,或者我不知道限制/最佳做法。
感谢您的回答和反馈!
【问题讨论】:
-
如果您有一个与 PG 功能做同样事情的代码功能,您也不必在多个地方更改它。哪个是“最好的”是一种观点,它现在真的很重要吗?
-
将它作为一个包含所有三个查询的 javascript 函数保存在 nodejs 中,并在任何地方使用该函数对于代码可读性和维护角度来说是一个更好的选择。您可以使用事务来实现 ACID。
标签: node.js postgresql