よくある問題の一つなのですが
UPDATEしてその値を返す方法でRETURNINGがあると最近気が付いたので
RETURNINGを利用したいと考えております。
下記のシェルを
shell
1 doc_list=`psql -d $3 -t -A << _SQL 2: 3 body_results AS ( 4 SELECT doc_id, 5 jsonb_set(src, '{"properties"}', 6 jsonb_set(src->'properties', '{"parent"}', to_jsonb(parent_new))) AS body 7 FROM t2 8 WHERE parent <> parent_new 9 ) 10 SELECT body_results.doc_id 11 FROM body_results,e_sys.doc_source_user 12 WHERE e_sys.doc_source_user.doc_id = body_results.doc_id; 13_SQL` 14#↑で更新予定のdoc_idを取得して続けて↓で更新 15 psql -d $3 -t -A << '_SQL' 16: 17 body_results AS ( 18 SELECT doc_id, 19 jsonb_set(src, '{"properties"}', 20 jsonb_set(src->'properties', '{"parent"}', to_jsonb(parent_new))) AS body 21 FROM t2 22 WHERE parent <> parent_new 23 ) 24 UPDATE e_sys.doc_source_user AS target 25 SET body = body_results.body 26 FROM body_results 27 WHERE target.doc_id = body_results.doc_id; 28_SQL 29#シェルスクリプト内で上記doc_listを取得して処理 30 docs=(`echo $doc_list`) 31:
をRETURNING句を利用してまとめたいと思っております。
Googleさんで”Postgres RETURNING”などで調査すると
psql -d $3 -t -A << '_SQL' : body_results AS ( SELECT doc_id, jsonb_set(src, '{"properties"}', jsonb_set(src->'properties', '{"parent"}', to_jsonb(parent_new))) AS body FROM t2 WHERE parent <> parent_new ) UPDATE sys.doc_source_user AS target SET body = body_results.body FROM body_results WHERE target.doc_id = body_results.doc_id RETURNING doc_id; _SQL
みたいなので大丈夫な気がするのですが
今現在実行環境が無いのでテストしたいと思っております。
Postgresのテスト環境はどこかにございませんでしょうか?
お忙しいところ恐縮ですが上記何か情報をご存知な方はコメント頂けますと幸いです。
回答1件
あなたの回答
tips
プレビュー