同様の質問がありますが、私の問題に対処していません。リモート データベースにストアド プロシージャを定義しています。その操作の一部として、SP はローカル ファイルから (ローカル マシンで実行されているアプリケーションを介して) 一括挿入する必要があります。手順は次のとおりです。
CREATE OR REPLACE FUNCTION upsert_realtime(path text, traveltime_table regclass)
RETURNS void AS
$BODY$
BEGIN
EXECUTE format('COPY temp_table(link_id,start_time,end_time,travel_time,interval_time, travel_mode) FROM %L DELIMITER '';'' CSV', path);
--...
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION upsert_realtime(text, regclass)
OWNER TO postgres;
SP に提供されるパスは、ローカル マシン上にあります。
select * from upsert_realtime('/home/.../travel_time.txt','realtime_travel_time');
したがって、次のエラーが発生します。
terminate called after throwing an instance of 'soci::postgresql_soci_error'
what(): Cannot execute query. ERROR: could not open file "/home/.../travel_time.txt" for reading: No such file or directory
私の頭に浮かぶ唯一のことは、どういうわけか自動的scp
にファイルをpostgresqlサーバーに送信してからSPを実行することですが、これは最良のアイデアではありません。解決策を見つけるのを手伝ってもらえますか? どうもどうも