我有一个查询在尝试创建临时表时出错。查询是:
创建临时表temp_TABLE_t(LIKE original_TABLE INCLUDING INDEXES)
返回的错误为:
postgres7错误:[-1:错误:EXECUTE中关系14026125]的缓存查找失败("CREATE TEMPORARY TABLE temp_TABLE_t(LIKE original_TABLE INCLUDING INDEXES)")
我在PostgreSQL论坛上发现了两个线程,但不幸的是,它们没有解释太多:
http://archives.postgresql.org/pgsql-performance/2010-04/msg00026.php
http://archives.postgresql.org/pgsql-performance/2010-04/msg00028.php
这个查询在其他服务器上运行得很好,它只在我们的一台服务器上失败了。你能告诉我是什么导致了这个错误以及如何修复它吗?我最初认为这是创建一个与现有临时表同名的临时表名的结果。我每次都更新代码以创建一个随机命名的临时表,但这也不起作用。
我删除了一个架构,出现了"查找关系xxxx失败"的错误。还有一张桌子的名字。我正在删除的模式中的一些表似乎处于一种奇怪的状态。最后我们做了第三步。
-
我们得到了表的C。oid。
select c.oid from pg_class c join pg_namespace n on n.oid=c.relnamespace where c.relname = 'MY_TABLE_NAME' and n.nspname='MY_SCHEMA_NAME';
-
下一篇:
delete from pg_class where oid = MY_OID; delete from pg_depend where objid = MY_OID; delete from pg_constraint where conrelid = MY_OID;
-
最后:
drop schema MY_SCHEMA_NAME cascade
然后,在另一个表中出现了另一个类似的错误,我们重复步骤1到3,直到删除该模式。
我在从视图创建临时表时遇到了同样的问题,类似于您在这里所做的:
create temporary table temp_table_t (LIKE original_table including indexes);
我也有同样奇怪的经历,那只是发生在我们的一台服务器上。
对我来说,这就像用替换original_table
(这是我的一个视图)一样简单
create or replace view my_view as (
// my view definition
);
语法。在那之后,我用来创建临时表的过程没有出现任何错误。
我不知道你能对你的表做些什么,因为它不像重新定义视图那么简单。如果你能承受数据丢失的代价,你可以尝试删除表并重新创建它。