Как боковое присоединение к функции - PullRequest
0 голосов
/ 11 марта 2019

Я не уверен, что мой вопрос правильный, но это то, что я пытаюсь сделать.

У меня есть таблица errorlog с полем link, и у меня есть функция http_get (основанная на pgsql-http, которая дает мне status из link)

Я считаю, что мне нужно выполнить боковое соединение следующим образом:

SELECT
    el.link,
    hg.status
FROM
    errorlog AS el
    LEFT OUTER JOIN LATERAL http_get(el.link) AS hg ON true
WHERE el.link IS NOT NULL ;

Но это не дает мне никаких результатов. Как применить такую ​​функцию к таблице?

errorlog таблица:

+----+---------------------+
| id | link                |
+----+---------------------+
| 1  | http://www.test.com |
+----+---------------------+
| 2  | http://www.link.com |
+----+---------------------+

pgsql-http: https://github.com/pramsey/pgsql-http

Обновление: Я пробовал эти запросы:

SELECT
    el.link,
    (http_get(el.link)).status
FROM
    errorlog AS el
WHERE el.link IS NOT NULL ;

Результат: No records found.

SELECT
    el.link,
    hg.status
FROM
    errorlog AS el, http_get(el.link) AS hg
WHERE el.link IS NOT NULL ;

Результат: No records found.

Однако это работает:

select * from http_get('http://test.com')

Ответы [ 2 ]

0 голосов
/ 11 марта 2019

Почему бы просто не вызвать функцию в предложении SELECT?

SELECT
    el.link,
    (http_get(el.link)).status
FROM
    errorlog AS el
WHERE el.link IS NOT NULL ;

Кроме того, вызовы функций всегда выполняются неявно как LATERAL, а здесь LEFT OUTER JOIN в принципе бесполезен, поэтому еслиВы настаиваете на выполнении боковой функции, а затем делаете это:

SELECT
    el.link,
    hg.status
FROM
    errorlog AS el, http_get(el.link) AS hg
WHERE el.link IS NOT NULL ;
0 голосов
/ 11 марта 2019

Ваш запрос должен дать вам как минимум столько же строк результата, сколько errorlog.Если это не так, значит, произошла ошибка.

...