我使用以下查询
在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。
答案 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将临时表直接转储到文件可能不是一种选择。您可以复制到标准输出但是效果如何取决于您访问数据库的方式。
如果你不使用临时表,你可能会有更好的运气。当然,您必须管理唯一的表名以避免与其他会话冲突,并且您必须注意确保在完成它们时删除了非临时临时表。