PostgreSQL转储临时表

时间:2011-12-14 06:07:03

标签: postgresql dump temp-tables

我使用以下查询

在PostgreSQL数据库中创建了临时表
SELECT * INTO TEMP TABLE tempdata FROM data WHERE id=2004;

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

"C:\Program Files\PostgreSQL\9.0\bin\pg_dump.exe" -F t -a -U my_admin -t tempdata myDB >"e:\mydump.backup"  

我收到一条消息说

pg_dump: No matching tables were found  

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

P.S。 :我也想恢复它。我不想使用任何额外的组件。

TIA。

1 个答案:

答案 0 :(得分:4)

我认为您不能将pg_dump用于该临时表。问题是temporary tables only exist within the session where they were created

  

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

因此,您要在一个会话中创建临时表,但pg_dump将使用不具有临时表的其他会话。

但是,COPY应该有效:

  

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

但您要么将数据复制到标准输出,要么将数据复制到数据库服务器上(需要超级用户访问):

  

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

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

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