dblink_build_sql_update
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
может быть полезна при избирательной репликации локальной таблицы с удалённой базой данных. Она выбирает строку из локальной таблицы по заданному первичному ключу, а затем формирует SQL-команду UPDATE
, дублирующую эту строку, но заменяющую в ней значения первичного ключа данными из последнего аргумента. (Чтобы получить точную копию строки, просто укажите одинаковые значения в двух последних аргументах.) Команда UPDATE
всегда присваивает значения всем полям строки — основное отличие этой функции от dblink_build_sql_insert
в том, что она предполагает, что целевая строка уже существует в удалённой таблице.
Аргументы
relname
Имя локального отношения, например
foo
илиmyschema.mytab
. Заключите его в двойные кавычки, если это имя в смешанном регистре или содержит специальные символы, например"FooBar"
; без кавычек эта строка приводится к нижнему регистру.primary_key_attnums
Номера атрибутов (начиная с 1) полей первичного ключа, например
1 2
.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)