5

タイトルが示すように、複数の行の値を効率的に更新する方法を推測するのに苦労しています。列は data-type で実装されますltree。したがって、このデータ型で使用できる特別な操作の形式がいくつかあるはずですpostgresql。例を次に示します。

テーブルの名前、たとえば、product_sectionsこれらの値を含む列の名前はsection_path (type: ltree)

Android
Android.Browser
Android.Browser.Test
Android.Browser.Compare.URL

ここでは、データが次のようになるように、 のBrowserような部分だけを更新したいと思います。Foo

Android
Android.Foo
Android.Foo.Test
Android.Foo.Compare.URL

前もって感謝します :)

4

5 に答える 5

2
update product_sections
set product_path = 'Android.foo'::lpath|| subpath(product_sections,2)) 
where product_path <@ 'Android.browser'::lpath

テストされていませんが、これで正しい結果が得られるはずです。

于 2015-02-01T06:00:45.093 に答える
0

私のプロジェクトでも同じ必要がありました。以前の回答はうまくいかなかったので、解決策を投稿します。

2 つの要求でそれを行う方法を見つけました。最初の要求は の ltree パスを変更Android.BrowserAndroid.Foo、2 番目の要求は の子の ltree パスを変更しますAndroid.Browser

どうぞ :

UPDATE product_sections SET product_path = 'Android.Foo'
       WHERE path = 'Android.Browser';
UPDATE product_sections SET product_path = 'Android.Foo'
       || subpath(product_path, nlevel('Android.Browser')) 
       WHERE product_path ~ 'Android.Browser.*{1,}';
于 2018-11-05T14:34:53.343 に答える