dblink_build_sql_update — 主キーフィールドの値として提供された値を使用したUPDATE文を構築します
dblink_build_sql_update(text relname, int2vector primary_key_attnums, integer num_primary_key_atts, text[] src_pk_att_vals_array, text[] tgt_pk_att_vals_array) returns text
dblink_build_sql_update
はローカル側のテーブルの一部を選択した複製をリモートデータベースに行う場合に有用になる可能性があります。
これは主キーによりローカルテーブルから行を選択し、その主キー値を最後の引数で与えた値に置き換えて、行を複製するUPDATE
SQLコマンドを構築します。
(行をそのまま複製する場合は、単に最後の2つの引数に同じ値を指定してください。)
このUPDATE
コマンドは常に行のすべてのフィールドを代入します。
この関数とdblink_build_sql_insert
の主な違いは、対象の行がリモート側のテーブルにすでに存在すると仮定している点です。
relname
例えばfoo
やmyschema.mytab
といったローカル側のリレーションの名前です。
例えば"FooBar"
のように名前に大文字小文字が混在する場合や特殊文字が含まれる場合は二重引用符で括ってください。
引用符がないと文字列は小文字に変換されます。
primary_key_attnums
例えば1 2
といった、主キーフィールドの属性番号(1始まり)です。
num_primary_key_atts
主キーフィールドの個数です。
src_pk_att_vals_array
ローカルタプルを検索するために使用される主キーフィールドの値です。 各フィールドはテキスト形式で表されます。 これらの主キーの値を持つ行がローカル側に存在しない場合はエラーが発生します。
tgt_pk_att_vals_array
最終的なUPDATE
コマンドにおいて置き換えられる主キーフィールドの値です。
各フィールドはテキスト形式で表されます。
要求したSQL文をテキストとして返します。
PostgreSQL 9.0の段階で、primary_key_attnums
の中の属性数は、SELECT * FROM relname
内の列の位置に対応する、論理的列数として翻訳されます。
以前のバージョンは物理的な列の位置として数を翻訳しました。
テーブルの存続期間中に、表示された列の左側のどんな列でも削除されると差異が生じます。
SELECT dblink_build_sql_update('foo', '1 2', 2, '{"1", "a"}', '{"1", "b"}'); dblink_build_sql_update ------------------------------------------------------------- UPDATE foo SET f1='1',f2='b',f3='1' WHERE f1='1' AND f2='b' (1 row)