无法在Heroku Postgres上执行插入/更新操作

bjp0bcyl  于 2023-05-23  发布在  其他
关注(0)|答案(1)|浏览(172)

我们在Heroku示例上托管了一个Codeigniter(PHP)应用程序。我们使用Heroku Postgres数据库进行连接和CRUD操作。它还通过Heroku Connect连接到Salesforce示例,数据通过Heroku Connect来回流动。
我们已经有两个Salesforce沙盒示例连接到Heroku应用程序,这些应用程序是在一年多前建立的。当我们想在本周设置另一个沙盒示例时,我们在执行插入和更新操作时得到了以下错误:
pg_query():查询失败:函数hstore(salesforce.account)不存在第1行:trigger_row.old = hstore(OLD.)- excluded_cols ^ HINT:没有与给定名称和参数类型匹配的函数。您可能需要添加显式类型强制转换。QUERY:trigger_row.old = hstore(OLD.)- excluded_cols CONTEXT:PL/pgSQL函数salesforce.hc_account_logger()在分配时第31行
错误中提到的文件或行号都与我们的代码无关。
我们做了一些研究,发现截至2022年8月1日,Heroku模式发生了一些结构性变化。从错误消息中,我们了解到hstore扩展丢失或未正确配置。所以我们确实将扩展添加到heroku_ext模式中,如一些文章中所解释的。但这对我们没用。
所以我们向Heroku寻求进一步的帮助。他们回应说,hstore扩展似乎安装在正确的模式中,并且search_path也设置正确。
但是,他们没有发现任何配置问题。
但已经有两个Heroku应用程序在一年多前托管,目前工作正常。在代码版本或数据库连接方面没有任何差异。
我们对这里显示的错误一无所知。由于我们接近生产部署,并且由于新的问题,我们已经被推迟了一个星期。
有人能帮助我们理解这个问题吗?

ddarikpa

ddarikpa1#

我们终于修好了。
该问题发生在Codeigniter 3中,当连接到Postgres数据库时,代码手动覆盖CI_DB_postgre_driver类下第166行的search_path(Filepath:/system/database/drivers/postgre/postgre_driver.php)。
我用的是Codeigniter 3.1.0。其他版本的行号可能会有所不同。
我们注解了下面的行,并尝试执行插入/更新操作,这对我们很有效。
空($this->schema)或$this->simple_query('SET search_path TO '.$this->schema.',public');
由于Heroku强制要求在heroku_ext模式中默认安装扩展,因此CodeIgniter的上述代码中缺少该模式。
我希望这能帮助社区中的其他人。
谢谢大家!

相关问题