【发布时间】:2022-01-16 19:22:18
【问题描述】:
我在 docker 上使用气流 2.2.0 并通过 ETL 管道发出多个查询。一切正常,直到我达到如下所示的特定查询:
INSERT INTO final_table (
col1,
col2
)
SELECT
col1,
col2
FROM some_temp_table
LEFT JOIN some_other_tables
在我拥有的较大的表集上完成此查询大约需要 30 秒。但是,发生的情况是查询是由 Airflow 向 Postgres 发出的,然后在大约 5 分钟内什么都没有返回,直到 Airflow 最终由于我相信在该特定任务中没有收到任何响应而导致管道崩溃。
错误如下:
psycopg2.OperationalError: server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
(...)
self._execute_queries(connection=connection, cursor=cursor, query=query)
psycopg2.InterfaceError: connection already closed
我已经检查了所有我能想到的东西,但没有发现任何奇怪的东西。 pg_stat_activity 表显示查询始终处于活动状态,似乎没有被任何其他查询阻塞。
Postgres 的日志显示,Airflow 发出的查询被 Postgres 接收。日志如下:
[3244] LOG: statement: BEGIN
[3244] LOG: statement:
INSERT INTO final_table (
col1,
col2
)
SELECT
col1,
col2
FROM some_temp_table
LEFT JOIN some_other_tables
但在那之后,postgres 不会发出任何 COMMIT 命令(因为它发生在所有其他事务中)。查询似乎无限期地挂在那个状态。
当我直接通过数据库客户端(在本例中为 DBeaver)运行相同的精确查询时,一切正常,查询开始运行,表在 30 秒内填满。此外,当我使用较小的数据集运行相同的 ETL 管道时,一切正常,查询通过 Airflow 成功运行。
我真的很困惑问题可能是什么以及我应该将注意力集中在哪里。如果有人经历过类似的事情,我们将不胜感激。
【问题讨论】:
标签: python postgresql airflow psycopg2