如果 postgres 连接刷新,我是否需要重新创建临时 table?

Do I need to recreate a temp table if a postgres connection refreshes?

所以我想上传一个临时文件 table,使用 csv 文件填充它,然后 运行 一堆具有相同连接的其他查询。目前我正在上传一个正常的 table,做我的查询然后删除它。但是我想让它成为临时的以避免混淆,并避免如果代码由于某种原因(exception/debugging 等)在它有机会删除 [=17= 之前停止时将大量数据留在数据库中].我正在使用 psycopg2 在 python 中完成所有这些工作。

首先,我假设临时 table 会在连接存在时一直存在。这是真的?但更重要的是,psycopg2 数据库连接是否会通过重新建立连接来自动处理暂时的连接中断?我 运行ning 的查询非常耗时,所以我担心这可能会发生。在这种情况下,有什么方法可以知道连接何时刷新,以便我可以重新上传临时 table?

Firstly, I've assumed the temporary table will hang around as long as the connection is alive. Is this true?

A TEMPORARY TABLE 会在您的会话结束时自动删除。因此,会话结束时不会遗漏任何垃圾。

But more importantly, does the db connection ever drop out and refresh?

通常会话不会自动终止。如果您想知道临时 table 是否会在其他会话中产生任何冲突,您不必担心:临时 table 仅存在于当前会话中。

In which case is there some way of knowing when the connection refreshes so I can reupload the temporary table?

我不确定我在这里听懂了你的问题,但有一点很清楚:如果会话终止,临时 table 也会终止。如果您的客户端配置为自动重试与数据库建立连接,它将不会再次看到 table。如果您想在尝试创建已存在的 table 时避免出现错误消息,请尝试:

CREATE TEMPORARY TABLE IF NOT EXISTS tb_tmp (...);

并确保它是空的:

TRUNCATE TABLE tb_tmp;

does a psycopg2 db connection ever automatically handle a momentary connection drop out by reestablishing a connection?

你的意思是它会不耐烦,杀死一个活的但 "stalled"(例如网络拥塞)连接,并用一个新连接替换它吗?不。如果你愿意,你可能会编写代码来做到这一点(但你为什么要这么做?)但 psycopg2 本身不会那样做。