Temporary tables

Юрис
Дата: 08.08.2003 11:08:09
Существует такой запрос, точнее не запрос, а команда на создание временной таблицы:
$sqlcmd = "CREATE TEMP TABLE tmp_table1 AS SELECT " .$p_distinct. " " .$sql_columns. " FROM " .$sql_table ;

В последствии идёт код в котором запускается данная команда:
$sqlcmd_tmp = $sqlcmd;
$tmp_res = pg_Exec( $conn, $sqlcmd_tmp );
Обычно всё работает гладко и без проблем. Но бывают моменты (от чего это зависит пока ещё не знаю) когда данная команда возвращает ошибку следующего вида :
Warning: pg_exec()[function.pg-exec]:Query failed:ERROR: cache lookup of relation 149064743 failed.

Скажем далее идёт тоже код следующего вида:
$sqlcmd_count = "SELECT * FROM tmp_table1";
$tmp_count = pg_Exec( $conn, $sqlcmd_count );
Он тоже работает без проблем, но также как и в первый раз бывают моменты когда возвращается ошибка.
Warning: pg_exec()[function.pg-exec]:Query failed: ERROR: Relation "tmp_table1" does not exist.

Вот я и хотел спросить от чего это может зависеть. Есть ли какие-то параметры отвечающие за темп таблицы и как они связаны скажем общим максимальным колличеством клиентов и прочими настройками сервера (разделяемая память, кол-во симафоров и т.д.). Возможно это не связано с этим поэтому буду рад выслушать любые предположения.
Спасибо заранее.
Vel
Дата: 08.08.2003 11:15:11
Temp таблицы создаются только для данного коннекта. При обрыве коннекта или его завершении они удаляются. Посмотри, можел у тебя при большом количестве соебинений и запросов теряется соединение, а потом воостанавливается, а темпа там уже нет
Юрис
Дата: 08.08.2003 11:21:25
Кстате забыл добавить. Когда всё это было реализовано на PostgreSQL 7.1 то всё было без проблем. а теперь когда стоит 7.3.3 Появились подобные казусы. Вот я и думаю нет ли различий каких-либо в реализации темп таблиц между данными версиями. Просмотр changelog'ов ничего не дал ( хотя кончно может я что-то и пропустил ).
Vel
Дата: 08.08.2003 15:57:23
Конфигурация сервера такая же?
У меня, на 500 пеньке часто обрывался конект при вливке данных и при работе бекендов. Поправил postgres.conf и все нормально заработало
Юрис
Дата: 08.08.2003 17:02:42
Вроде да.

А что именно ты правил если не секрет ?
Vel
Дата: 08.08.2003 17:13:42
Connection Parameters, Shared Memory Usage, Optimizer Parameters.
При настройках по умолчанию (поставил себе временный сервак для тестирования, чтобы основной не дергать) при psql main p < ~/dump (локально)
раза по два рвались конекшены. В бекенде в темп таблице хранились "выделенные" данные. Так при работе даже шести клиентов одновременно иногда разрывались соединения, потом поднимались, но темпов не было