dblink_build_sql_insert#
dblink_build_sql_insert
dblink_build_sql_insert — создает оператор INSERT, используя локальный кортеж, заменяя значения полей первичного ключа альтернативными значениями, предоставленными пользователем
Синтаксис
dblink_build_sql_insert(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_insert
может быть полезна при выполнении выборочной репликации локальной таблицы в удаленную базу данных. Она выбирает строку из локальной таблицы на основе первичного ключа, а затем создает команду 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
Значения полей первичного ключа, которые будут помещены в результирующую команду
INSERT
. Каждое поле представлено в текстовой форме.
Возвращаемое значение
Возвращает запрошенный SQL-оператор в виде текста.
Примечания
Начиная с PostgreSQL 9.0, атрибуты номеров в primary_key_attnums
интерпретируются как логические номера столбцов, соответствующие позиции столбца в SELECT * FROM relname
. В предыдущих версиях номера интерпретировались как физические позиции столбцов. Это имеет значение, если какие-либо столбцы слева от указанного столбца были удалены в течение существования таблицы.
Примеры
SELECT dblink_build_sql_insert('foo', '1 2', 2, '{"1", "a"}', '{"1", "b''a"}'); dblink_build_sql_insert -------------------------------------------------- INSERT INTO foo(f1,f2,f3) VALUES('1','b''a','1') (1 row)