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)