PostgreSQL 转储临时表

Shi*_*h11 2 postgresql dump temp-tables

我使用以下查询在 PostgreSQL 数据库中 创建了一个临时表

SELECT * INTO TEMP TABLE tempdata FROM data WHERE id=2004;
Run Code Online (Sandbox Code Playgroud)

现在我想创建这个临时表的备份tempdata
所以我使用以下命令行执行

"C:\Program Files\PostgreSQL\9.0\bin\pg_dump.exe" -F t -a -U my_admin -t tempdata myDB >"e:\mydump.backup"  
Run Code Online (Sandbox Code Playgroud)

我收到一条消息说

pg_dump: No matching tables were found  
Run Code Online (Sandbox Code Playgroud)

是否可以创建 的转储temp tables
我做得正确吗?

PS:我也想恢复相同的内容。我不想使用任何额外的组件。

TIA。

mu *_*ort 6

我认为您无法使用pg_dump该临时表。问题是临时表仅存在于创建它们的会话中

CREATE TEMPORARY TABLE相反,PostgreSQL 要求每个会话为要使用的每个临时表发出自己的命令。这允许不同的会话将相同的临时表名称用于不同的目的,而标准的方法限制给定临时表名称的所有实例具有相同的表结构。

因此,您可以在一个会话中创建临时表,但pg_dump会使用没有临时表的另一会话。

但是,COPY应该有效:

COPY在 PostgreSQL 表和标准文件系统文件之间移动数据。

但您可以将数据复制到标准输出或数据库服务器上的文件(需要超级用户访问权限):

带有文件名的 COPY 指示 PostgreSQL 服务器直接读取或写入文件。服务器必须可以访问该文件,并且必须从服务器的角度指定名称。
[...]
COPY 命名文件仅允许数据库超级用户使用,因为它允许读取或写入服务器有权访问的任何文件。

因此,使用 COPY 将临时表直接转储到文件可能不是一个选择。您可以复制到标准输出,但效果如何取决于您访问数据库的方式。

如果您不使用临时表,您可能会有更好的运气。当然,您必须管理唯一的表名称以避免与其他会话发生冲突,并且您必须注意确保非临时临时表在使用完毕后被删除。