From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | digoal(at)126(dot)com |
Cc: | pgsql-bugs(at)postgresql(dot)org, Joe Conway <mail(at)joeconway(dot)com> |
Subject: | Re: BUG #8710: dblink dblink_get_pkey output bug, and dblink_build_sql_update bug |
Date: | 2013-12-31 16:03:51 |
Message-ID: | 24941.1388505831@sss.pgh.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs |
digoal(at)126(dot)com writes:
> NOTE, postgresql 9.0+ we use dblink_build* to build SQL , the primary key
> use the logical order. but we cann't use dblink_get_pkey get the order
> int2vector, we must use the pg_attribute catalog get the logical number.
> So, the dblink_get_pkey function need change .
That doesn't sound to me like a bug, but a feature request. The
documentation clearly states that dblink_get_pkey's position column
runs from 1 to N. Your real complaint seems to be "why isn't it
easier to get the column numbers to give to dblink_build_sql_update
and friends"?
I think we actually made this worse in PG 9.0: before that, someone
could get the pg_index.indkey array for the relevant index and use
that, but now that's the wrong thing if any dropped columns are involved.
I'm tempted to propose overloading dblink_build_sql_update and friends
with new functions defined like
dblink_build_sql_update(relname regclass,
indexname regclass,
src_pk_att_vals_array text[],
tgt_pk_att_vals_array text[])
and letting all the column lookup machinations happen internally
to that.
> and the second bug:
> digoal=# select * from dblink_build_sql_update('tbl_dblink', '4 7 10', 3,
> $${1, pk2, 1}$$, $${2,pk2,2}$$);
> dblink_build_sql_update
> ------------------------------------------------------------------------------------------------------------------------------------
> -------------------------------------------------------------------------------------------------------------
> UPDATE tbl_dblink SET c1 = '1', c2 = '1', c3 = 'test', pk1 = '2', c4 =
> 'test', c5 = '2', pk2 = 'pk2', c6 = 'test', c7 = '1', pk3 =
> '2', c8 = '1', c9 = 'test', c10 = '2013-12-31 08:39:01.400074' WHERE pk1 =
> '2' AND pk2 = 'pk2' AND pk3 = '2'
> (1 row)
> We see, the WHERE clause not src pk arrays, but target pk arrays. so this is
> a bug.
That appears to me to be working as documented. It might be better if the
arguments were referred to as "local_pk_att_vals_array" and
"remote_pk_att_vals_array", since the function isn't meant to change the
PK values as you seem to think.
regards, tom lane
From | Date | Subject | |
---|---|---|---|
Next Message | Alvaro Herrera | 2013-12-31 16:34:19 | Re: BUG #8470: 9.3 locking/subtransaction performance regression |
Previous Message | digoal | 2013-12-31 00:48:46 | BUG #8710: dblink dblink_get_pkey output bug, and dblink_build_sql_update bug |