【发布时间】:2026-01-10 23:10:01
【问题描述】:
我对 Postgres 函数一无所知,但是最近出现了几次使用它们的需求(这可能表明我正在错误地处理问题,但无论如何......)
我想定义一个这样的 Postgres 函数,然后我将通过 Rails 应用程序中的查询访问它:
CREATE FUNCTION date_in_time_zone(time_zone) RETURNS date AS
'SELECT DATE(NOW() AT TIME ZONE time_zone);'
LANGUAGE SQL;
(来自this question)。
问题第 1 部分:如何定义此函数?
我想我会这样做:
sql = "CREATE FUNCTION date_in_time_zone(time_zone) RETURNS date AS
'SELECT DATE(NOW() AT TIME ZONE time_zone);'
LANGUAGE SQL;"
ActiveRecord::Base.connection.execute sql
这对吗?
问题第 2 部分:这个函数的作用域和生命周期是什么?
一旦定义,此功能将持续多长时间以及管理该功能版本控制的最佳方式是什么。如果它是在数据库而不是 Rails 中定义的,那么如果我想改变它的工作方式,我将不得不小心地销毁它或更新它。每次加载 Rails 环境时,我还需要一些方法来初始化函数。
我应该在应用程序初始化时创建一次函数,还是需要为每个 Web 请求创建函数?我认为前者是在数据库中定义的,但我不确定。
问题第 3 部分:我是否应该使用这种方法?
这只是个坏主意吗?我应该尝试以不同的方式解决问题吗?我真的不知道这些函数的作用域或生命周期是什么。
【问题讨论】:
标签: ruby-on-rails postgresql timezone