ActiveRecord :: StatementInvalid(PG :: UndefinedFunction:ERROR:function <function_name>(整数,未知,未知)不存在

时间:2015-08-06 06:28:51

标签: ruby-on-rails ruby postgresql amazon-web-services backend

我正在为我的本地计算机上的移动应用程序设置后端环境,而Ruby模型中的Postgres函数调用会在请求中出错。这是日志:

D, [2015-08-05T23:10:06.029187 #1732] DEBUG -- :   Game Load (2.0ms)   SELECT field1, field2, field3
 FROM valuestable 
 WHERE ARRAY[field1] && (
 SELECT custom_function(3, '{}', 'ipad')
 );

E, [2015-08-05T23:10:06.029262 #1732] ERROR -- : PG::UndefinedFunction: ERROR:  function custom_function(integer, unknown, unknown) does not exist
LINE 4:           SELECT custom_function(3, '{}', 'ipad')
                         ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
          SELECT field1, field2, field3
          FROM gamestable 
          WHERE ARRAY[field1] && (
          SELECT custom_function(3, '{}', 'ipad')
        );

我们使用Postgres 9.4.1 / Redis / Rails / AWS。

上述sql查询中的custom_function是在迁移过程中自动创建的类中定义的。我在所述ruby应用程序的.rb文件夹中的一个带时间戳的db/migrate文件中看到了它。但是,我不知道如何将“包含/导入”到我的模型中,因此可以防止此错误。我有一个名为user_functions.sql的sql文件,由我的一位前同事创作,其中引用了custom_function(来自上面的错误)。

另外,另一个有趣的观点是这个应用程序在Staging和Production上运行完美。它只在本地机器上才能工作。我不知道这是否是直接在AWS上运行的后端上的某种一次性设置,或者它只是我在设置本地后端时缺少的一步。

元信息:我最初是一个iOS开发者,试图在没有真正的后端人的情况下找出一些后端逻辑。

到目前为止我尝试了什么:

  • 确保Postgres的版本号在服务器和本地后端匹配
  • 在第一次调用custom_function之前,尝试使用ActiveRecord :: Base.connection.execute(IO.read(“/ path / to / user_functions.sql”))。

1 个答案:

答案 0 :(得分:0)

查看自定义函数期望的参数和转换它们。 像这样:代替SELECT custom_function(3, '{}', 'ipad')使用SELECT custom_function(3, '{}'::json, 'ipad'::text)SELECT custom_function(3, '{}'::text, 'ipad'::text),许多类型都可以在引号内输入