問題の Update multiple rows in same query using PostgreSQL Roman Pecker は、これに似た答えを出しました。私は質問のためにそれを修正しました:
update test as t set
column_a = c.column_a,
column_b = c.column_b
from (values
('123', bytea1),
('345', bytea2)
) as c(column_a, column_b)
where c.column_a = t.column_a;
私の場合、テーブル test には、column_b などの bytea 型の列があります。ただし、c.column_b はテキスト型であるため、これは機能しません。したがって、テキストからバイトへの変換がないことを示すエラーが生成され、キャストを使用するように示唆されます。キャストを使用しても、LATIN エンコーディングを参照するエンコーディングについて別のエラーが発生するため、どちらも役に立ちません。エラーの報告が不正確で申し訳ありませんが、現在、この作業が実行されたマシンにアクセスできません。
c.column_b のデフォルトのタイプはテキストのようです。「as」節で、「as c(column_a, column_b type bytea)」または他の方法で、列のタイプを指定することはできませんか? そうでない場合は、控えめに言っても少し洗練されていないように見えるバイナリ文字列関数を使用する必要があると思います。