Re: DBLink: interesting issue

Поиск
Список
Период
Сортировка
От Joe Conway
Тема Re: DBLink: interesting issue
Дата
Msg-id 3D8FDDC3.40901@joeconway.com
обсуждение исходный текст
Ответ на DBLink: interesting issue  ("Oleg Lebedev" <oleg.lebedev@waterford.org>)
Список pgsql-general
Oleg Lebedev wrote:
> Ok, here are all the files.
>

I'm now seeing the problem you reported. It is a bug in the new table function
code. Basically, you are trying to do this:

DELETE FROM tablea
WHERE NOT EXISTS
(
   SELECT remoteid
   FROM
   (
     SELECT remoteid
     FROM dblink('hostaddr=1.23.45.6 port=5432 dbname=webspec user=user
                  password=pass',
                 'SELECT objectid  FROM tablea WHERE objectid = ' ||
                  tablea.objectid)
     AS dblink_rec(remoteid int8)
   ) AS t1
);

But if you try:

SELECT remoteid
FROM
(
   SELECT remoteid
   FROM dblink('hostaddr=1.23.45.6 port=5432 dbname=webspec user=user
                password=pass',
               'SELECT objectid  FROM tablea WHERE objectid = ' ||
                tablea.objectid)
   AS dblink_rec(remoteid int8)
) AS t1;

you'll get:

ERROR:  FROM function expression may not refer to other relations of same
query level

which is what you're supposed to get. Apparently the error is not getting
generated as it should when this query is run as a subquery.

What you should actually be doing is:

DELETE FROM tablea
WHERE NOT EXISTS
(
   SELECT remoteid
   FROM dblink('hostaddr=1.23.45.6 port=5432 dbname=webspec user=user
                password=pass',
               'SELECT objectid  FROM tablea WHERE objectid = ' ||
                tablea.objectid)
   AS dblink_rec(remoteid int8)
);
DELETE 0

This should make your function work on 7.3beta, but I still need to track down
a fix for the bug. Thanks for the report!

Joe


В списке pgsql-general по дате отправления:

Предыдущее
От: Martijn van Oosterhout
Дата:
Сообщение: Re: Postgresql Automatic vacuum
Следующее
От: "Mr. Tomcat"
Дата:
Сообщение: Design question: Using Array datatypes