2012-02-02 54 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(這是我的一個視圖)一樣簡單。之後,我用來創建臨時表的過程沒有出現任何錯誤。

我不知道你可以用你的表做什麼,因爲它不像重新定義視圖那麼簡單。如果您可以承受丟失數據,您可以嘗試刪除表並重新創建它。

相關問題