【发布时间】:2023-04-01 13:00:02
【问题描述】:
我正在从事一个项目,我是 PostgreSQL 环境中的数据库设计师/管理员。领导决定使用 Rails 进行应用程序逻辑,并招聘了一名 Rails 程序员。
Rails 程序员说,他通常编写所有应用程序代码,不喜欢有人向他传递存储过程所带来的缺乏控制,而且他从未在 Rails 中这样做过。
数据库使用了大量的继承/EERM,因此存储过程和触发器将使他的工作变得更加轻松,此外还可以从使用 procs 中获得性能优势。
我有四个问题:
1) 如何从 Rails 调用 pl/pgSQL 存储过程而没有返回值
2) 如何从 Rails 中调用具有单个返回值(1 行/1 列)的 pl/pgSQL 存储过程
3) 如何从 Rails 调用具有 1 行多列返回值的 pl/pgSQL 存储过程。
4) 如何使用 OUT 参数从 Rails 调用 pl/pgSQL 存储过程?
谢谢!
【问题讨论】:
-
除非你能说服你的 Rails 程序员使用像Sequel 这样的东西,否则你会度过一段糟糕的时光。默认的 Rails ORM (ActiveRecord) 不认为数据库应该包含任何逻辑,并且不理解比
select *和简单连接更复杂的任何东西,如果您违反约定使用“花哨”的东西,比如触发器、存储过程,甚至是准备好的语句。 -
是的...基于过程和继承的 DB + ActiveRecord 将引导您直接进入thedailywtf.com 领域。你必须接受使用 Rails 的决定(大概是它的 ActiveRecord ORM),然后把你的数据库设计扔到窗外,然后制作一个遵循 ActiveRecord 约定的设计(没有像“外键”或“约束”这样愚蠢的东西,反正谁想要它们?)。或者,改变决定,看看你是否可以让他们至少使用理智的 ORM。
标签: ruby-on-rails ruby stored-procedures plpgsql rails-postgresql