【问题标题】:PostgreSQL error cache lookup failed for relation - what causes it and why?关系的 PostgreSQL 错误缓存查找失败 - 是什么原因导致它,为什么?
【发布时间】:2014-12-19 02:24:42
【问题描述】:

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

创建临时表 temp_table_t(像 original_table 包括索引)

返回的错误是:

postgres7 错误:[-1: 错误:关系 14026125 的缓存查找失败] 在 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

这个查询在其他服务器上运行得很好,它只在我们的一台服务器上失败了。关于导致错误的原因以及如何修复它,您可以给我任何见解吗?我首先认为这是创建一个与现有临时表同名的临时表名的结果。我更新了我的代码,每次都创建一个随机命名的临时表,但这也不起作用。

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    我正在删除一个架构,并且出现此错误“查找关系 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 步,直到我们删除了架构。

    【讨论】:

      【解决方案2】:

      我在从视图创建临时表时遇到了同样的问题,类似于您在此处所做的:

      create temporary table temp_table_t (LIKE original_table including indexes);
      

      我也有同样奇怪的经历,它只发生在我们的一台服务器上。

      对我来说,就像用

      替换 original_table(对我来说是一个视图)一样简单
      create or replace view my_view as (  
          // my view definition
      );
      

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-05
        • 2011-09-29
        • 1970-01-01
        • 1970-01-01
        • 2012-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多