2012-02-02 53 views
2

我有一个查询在尝试创建临时表时出错。查询是:PostgreSQL错误缓存查找失败的关系 - 是什么原因造成的,为什么?

CREATE TEMPORARY TABLE temp_table_t (LIKE original_table INCLUDING INDEXES)

返回的错误是:

postgres7 error: [-1: ERROR: cache lookup failed for relation 14026125] in EXECUTE("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

此查询运行于其他r服务器就好了,它仅在我们的一台服务器上失败。有什么洞察力可以告诉我是什么导致错误以及如何解决它?我首先想到这是使用现有临时表的相同名称创建临时表名称的结果。我更新了我的代码,每次创建一个随机命名的临时表,但这也不起作用。

回答

2

我正在删除一个模式,并且我有这个错误“查找失败的关系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,直到我们删除了架构。

1

从视图,类似于创建临时表时,你在做什么在这里,我遇到了同样的问题:

create temporary table temp_table_t (LIKE original_table including indexes); 

我也有过同样怪异的经验,它只是对只有一个发生我们的服务器。

对我来说是作为与

create or replace view my_view as ( 
    // my view definition 
); 

语法更换original_table(这是我的一个视图)一样简单。之后,我用来创建临时表的过程没有出现任何错误。

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

相关问题