2012-02-02 50 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

Этот запрос работает на othe r просто отлично, он не работает только на одном из наших серверов. Есть ли какое-либо понимание, которое вы можете дать мне относительно того, что вызывает ошибку и как ее исправить? Сначала я подумал, что это результат создания временного имени таблицы с тем же именем существующей временной таблицы. Я обновил свой код, чтобы каждый раз создавать случайную временную таблицу, и это тоже не сработало.

ответ

2

Я выбрал схему, и у меня была ошибка «lookup failed for relation 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); 

Я также имел тот же самый странный опыт, что это происходило только на только один наших серверов.

Для меня это было так просто, как замена original_table (который был для меня вид) с синтаксисом

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

. После этого процесс, который я использовал для создания временных таблиц, не дал никаких ошибок.

Я не знаю, что вы можете делать со своим столом, поскольку это не так просто, как переопределение представления. Если вы можете позволить себе потерять данные, вы можете попробовать отказаться от таблицы и воссоздать ее.

Смежные вопросы