dblink_build_sql_update <refpurpose>builds an UPDATE statement using a local tuple, replacing the primary key field values with alternative supplied values </refpurpose> — 主キーフィールドの値として提供された値を使用した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
<function>dblink_build_sql_update</function> can be useful in doing selective
replication of a local table to a remote database. It selects a row
from the local table based on primary key, and then builds an SQL
<command>UPDATE</command> command that will duplicate that row, but with
the primary key values replaced by the values in the last argument.
(To make an exact copy of the row, just specify the same values for
the last two arguments.) The <command>UPDATE</command> command always assigns
all fields of the row — the main difference between this and
<function>dblink_build_sql_insert</function> is that it's assumed that
the target row already exists in the remote table.
dblink_build_sql_update
はローカル側のテーブルの一部を選択した複製をリモートデータベースに行う場合に有用になる可能性があります。
これは主キーによりローカルテーブルから行を選択し、その主キー値を最後の引数で与えた値に置き換えて、行を複製するUPDATE
SQLコマンドを構築します。
(行をそのまま複製する場合は、単に最後の2つの引数に同じ値を指定してください。)
このUPDATE
コマンドは常に行のすべてのフィールドを代入します。
この関数とdblink_build_sql_insert
の主な違いは、対象の行がリモート側のテーブルにすでに存在すると仮定している点です。
relname
Name of a local relation, for example <literal>foo</literal> or
<literal>myschema.mytab</literal>. Include double quotes if the
name is mixed-case or contains special characters, for
example <literal>"FooBar"</literal>; without quotes, the string
will be folded to lower case.
例えばfoo
やmyschema.mytab
といったローカル側のリレーションの名前です。
例えば"FooBar"
のように名前に大文字小文字が混在する場合や特殊文字が含まれる場合は二重引用符で括ってください。
引用符がないと文字列は小文字に変換されます。
primary_key_attnums
Attribute numbers (1-based) of the primary key fields,
for example <literal>1 2</literal>.
例えば1 2
といった、主キーフィールドの属性番号(1始まり)です。
num_primary_key_atts
The number of primary key fields. 主キーフィールドの個数です。
src_pk_att_vals_array
Values of the primary key fields to be used to look up the local tuple. Each field is represented in text form. An error is thrown if there is no local row with these primary key values. ローカルタプルを検索するために使用される主キーフィールドの値です。 各フィールドはテキスト形式で表されます。 これらの主キーの値を持つ行がローカル側に存在しない場合はエラーが発生します。
tgt_pk_att_vals_array
Values of the primary key fields to be placed in the resulting
<command>UPDATE</command> command. Each field is represented in text form.
最終的なUPDATE
コマンドにおいて置き換えられる主キーフィールドの値です。
各フィールドはテキスト形式で表されます。
要求したSQL文をテキストとして返します。
As of <productname>PostgreSQL</productname> 9.0, the attribute numbers in
<parameter>primary_key_attnums</parameter> are interpreted as logical
column numbers, corresponding to the column's position in
<literal>SELECT * FROM relname</literal>. Previous versions interpreted the
numbers as physical column positions. There is a difference if any
column(s) to the left of the indicated column have been dropped during
the lifetime of the table.
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)