BeginnerEngineerBlog
中の人
中の人

【heroku postgresql salesforce】function get_xmlbinary() does not exist ffunction hstore(***) does not exist

公開: 2024-12-12 12:15
更新: 2024-12-12 13:06
5
heroku postgresql salesforce Functions
salesforceのherokuのpostgresqlにinsertとかupdateするとエラーになったのでメモ

こんにちは!

中の人です


こちらにチラっと書きましたが一つのメモとして残したいと思います

なんでしょうか?


herokuって、私の古いイメージでは「無料でwebアプリを公開できる」というスーパーなwebサービス?のイメージがありましたが、salesforceに買収された関係で今やherokuといえばsalesforceっていうイメージです(ちなみに今はherokuは全て有料になってるはずです)

それで、salesforceの一部となった関係で、herokuのpostgresqlをsalesforceに連携できるようになったんですね

どんな連携かと言うと、自分知ってる限りですが、herokuのpostgresqlのフィールドをsalesforceのオブジェクトのフィールドに紐づけることができて、つまりはsalesforceのオブジェクトのフィールドと、herokuのpostgresqlのテーブルのフィールドをリンクできるんですね

その関係があるからか、herokuのpostgresqlにinsertやupdateやdeleteすると、タイトルにある

function get_xmlbinary() does not exist
function hstore(***) does not exist

のエラーが出て

「なんやねんこれぇぇぇぇ」

てなる方がいるんですね(私もその一人)

参考

この2種類のエラーがまとまってる記事がヒットしなかったのでまとめて記事に残してメモとして紹介しようということです


解決方法


SET search_path TO hogehuga, public, heroku_ext;

search_pathに、目的のtableがあるhogehugaと、publicとheroku_extを含めると解決します

get_xmlbinary()


この関数は"public"schemaにあります

hstore()


この関数は"heroku_ext"schemaにあります


どこでこの関数使ってんねん


まずherokuのpostgresqlの利用したいtableがあるschemaには

_trigger_log

なるテーブルが存在し、各テーブル(accountとか)には

_hc_lastop
_hc_err

なるフィールドが存在します

_trigger_log


で、herokuのpostgresqlでinsertやupdateすると、salesforceの情報も上書きするみたいなんですが、その時の記録をこのテーブルに保管するみたいです

参考

_hc_lastop _hc_err


で、このフィールドたちは
_hc_lastopフィールドは「今salesforceにinsert中ですよ」とか「ssalesforceと連携完了したよ」なステータスが保存されるみたいです
_hc_errフィールドは、salesforceとの連携に失敗した時、そのエラー内容が登録されるみたいです

参考


つまり


updateやinsertするときに、上記のテーブルやフィールドを更新する関数がtriggerされるのですが、

_hc_lastopや_hc_errを更新する関数(多分hc_hogehuga_statusのような名前の関数?)の中に

get_xmlbinary

が使われてて

_trigger_logを更新する関数(多分hc_hogehuga_loggerのような名前の関数?)に

hstore

が利用されていました

気になる方はご自身のpostgresqlの中身を覗いてみてください!


終わりに


herokuのpostgresqlのschemaの...てパルスのファルシのルシがコクーンでパージみたいで簡単に言い表せないかな

\(^o^)/オワリ!
0
0
0
0
通信エラーが発生しました。
【広告】
似たような記事