dblink_build_sql_update#
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)