I am using Postgresql 9.1. I found that dblink is not returning result for BEGIN transaction.
------------------------------------------------------------
select new_conn('conn1');
select new_conn('conn2');
select dblink_send_query('conn1','begin; update t2 set i=10 where nam=''a1'';');
select dblink_send_query('conn2','begin; delete from t2 where nam=''a1'';');
pgdb=# select * from lock_vw;
datname | relname | transactionid | mode | granted | usename | current_query | query_start | age | procpid
---------+---------+---------------+------------------+---------+----------+--------------------------------+-------------------------------+-----------------+---------
pgdb | t2 | | RowExclusiveLock | t | postgres | <IDLE> in transaction | 2011-11-03 12:26:17.175681+06 | 00:00:04.05115 | 9414
pgdb | t2 | | ExclusiveLock | t | postgres | begin; delete from t2 where n | 2011-11-03 12:26:17.180294+06 | 00:00:04.046537 | 9415
pgdb | t2 | | RowExclusiveLock | t | postgres | begin; delete from t2 where n | 2011-11-03 12:26:17.180294+06 | 00:00:04.046537 | 9415
(3 rows)
select dblink_send_query('conn1','select i,nam from t2')
select * from dblink_get_result('conn1') as t2(i int, nam text);
ERROR: function return row and query-specified return row do not match
DETAIL: Returned row contains 1 attribute, but query expects 2.
select dblink_send_query('conn2','rollback');
-- Supposed to send result here
pgdb=# select * from dblink_get_result('conn1') as t2(i int, nam text);
i | nam
---+-----
(0 rows)
pgdb=# select * from t2;
i | nam
---+-------
1 | asdas
2 | a1
(2 rows)
------------------------------------------------------------------
Could any one please tell me why?