如何横向加入一个函数

How to lateral join a function

我不确定我的问题是否正确,但这就是我正在尝试做的事情。

我有一个 table 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 ;

但它没有给我任何结果。如何将这样的函数应用于 table?

errorlog table:

+----+---------------------+
| 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')

您的查询必须至少提供与 errorlog 一样多的结果行。如果没有,一定是有错误。

为什么不简单地调用 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 ;