PostgreSQL错误缓存查找关系失败-原因和原因



我有一个查询在尝试创建临时表时出错。查询是:

创建临时表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失败"的错误。还有一张桌子的名字。我正在删除的模式中的一些表似乎处于一种奇怪的状态。最后我们做了第三步。

  1. 我们得到了表的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';
    
  2. 下一篇:

    delete from pg_class where oid = MY_OID;
    delete from pg_depend where objid = MY_OID;
    delete from pg_constraint where conrelid = MY_OID;
    
  3. 最后:

    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
);

语法。在那之后,我用来创建临时表的过程没有出现任何错误。

我不知道你能对你的表做些什么,因为它不像重新定义视图那么简单。如果你能承受数据丢失的代价,你可以尝试删除表并重新创建它。

相关内容

最新更新