powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / create temp table
14 сообщений из 14, страница 1 из 1
create temp table
    #39173770
rassvet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день
столкнулся с такой проблемой:
Иногда в логах вижу ошибку

Код: plsql
1.
2.
Ошибка: ОШИБКА: cache lookup failed for relation 11904532
CONTEXT: SQL-оператор: "create temp table _foe as



в функции временная таблица создается так:
Код: plsql
1.
2.
3.
drop table if exists _foe;
create temp table _foe as 
select * from washer.t_service where "order"=io_id;



Появилась после перехода с версии 9.2 на 9.3
к БД подключаюсь через pgbouncer у него в настройках стоит pool_mode = transaction
ошибка плавающая, не могу отследить закономерность появления
насколько я понял 11904532 это OID временной таблицы
заметил что в логе код 11904532 повторяется, хотя по логике он каждый раз должен быть новый

из за чего может быть такая проблема ?
...
Рейтинг: 0 / 0
create temp table
    #39173827
tadmin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rassvet,
Если струткура временной таблицы постоянна, а данные вам нужны только во время транзакции, то я бы на вашем месте включил pgBouncer строку инициализации
Код: plsql
1.
create temp table ... on commit delete rows;


Не нужно лочить pg_catalog на каждый вызов функции, не нужно думать о существовании таблицы.
...
Рейтинг: 0 / 0
create temp table
    #39173965
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tadminrassvet,
Если струткура временной таблицы постоянна, а данные вам нужны только во время транзакции, то я бы на вашем месте включил pgBouncer строку инициализации
Код: plsql
1.
create temp table ... on commit delete rows;


Не нужно лочить pg_catalog на каждый вызов функции, не нужно думать о существовании таблицы.
а почему пг_каталог вдруг лочится?? И что ВЕСЬ что-ли????
...
Рейтинг: 0 / 0
create temp table
    #39173970
Lonepsycho
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rassvet,

чисто теоретически проблема может быть изза этого
Код: sql
1.
pool_mode = transaction

, а временная таблица у вас живёт в сессии. pgbouncer не гарантирует, что для следующей транзакции вам достанется та самая таблица (та самая сесия в которой вы её создали), или достанется она вам вообще не известно, поскольку в другой сессии та самая таблица может быть ещё не создана. с pgbouncer познакомился недавно, так что могу ошибатся, но думаю что дела обстоят именно так.
...
Рейтинг: 0 / 0
create temp table
    #39174008
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rassvet
в функции временная таблица создается так:

уточните ,плз:

в ф--ии на клиенте ?
или в ф--ии на сервере?
...
Рейтинг: 0 / 0
create temp table
    #39174060
rassvet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tadminЕсли струткура временной таблицы постоянна, а данные вам нужны только во время транзакции, то я бы на вашем месте включил pgBouncer строку инициализации
Код: plsql
1.
create temp table ... on commit delete rows;



Не совсем вас понял, это разве в pgBouncer можно делать ? или вы имеете ввиду в сам запрос создания временной таблицы добавить команду on commit delete rows ?
и чем это лучше ON COMMIT DROP?


Lonepsycho чисто теоретически проблема может быть изза этого
Код: plsql
1.
pool_mode = transaction




В 9.2 такой проблемы не было, специально поднял логи и искал, да и временная таблица нужна только в ту транзакцию когда она создается.

qwwq уточните ,плз:

в ф--ии на клиенте ?
или в ф--ии на сервере?

Функция создана на сервере и клиент ее переодически вызывает
...
Рейтинг: 0 / 0
create temp table
    #39174080
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rassvet Функция создана на сервере и клиент ее переодически вызывает
Ok т.е. баунсер не при делах.

ещё вопрос: -- что такое washer.t_service и какой у неё tableoid .
...
Рейтинг: 0 / 0
create temp table
    #39174087
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rassvet,


как вариант делайте EXECUTE 'CREATE temp TABLE AS ....' --- если дуло исчезнет -- косяк, наиболее вероятно, в 9.3. (какая минорная ?) [поиск в интернетах по тексту ошибки выведет вас на всякое разное].

если нет -- где--то у вас.
...
Рейтинг: 0 / 0
create temp table
    #39174149
Lonepsycho
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot rassvet... да и временная таблица нужна только в ту транзакцию когда она создается.[/quot]

имменно по этому вам и предлагали дополнить строку создания таблицы частью ON COMMIT, правда я бы делал ON COMMIT DROP;
...
Рейтинг: 0 / 0
create temp table
    #39174178
rassvet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwqещё вопрос: -- что такое washer.t_service и какой у неё tableoid .

это просто таблица
SELECT oid FROM pg_class WHERE relname = 't_service'
возвращает
"oid"
"4451156"
"4451250"
"4451407"
"4451542"
"4452009"
(их несколько видимо в разных схемах)
qwwqкак вариант делайте EXECUTE 'CREATE temp TABLE AS ....' --- если дуло исчезнет -- косяк, наиболее вероятно, в 9.3. (какая минорная ?)

9.3.10 версия которая по умолчанию поставилась из http://apt.postgresql.org/pub/repos/apt/ jessie-pgdg main

попробую переписать запрос на EXECUTE с ON COMMIT DROP
спасибо)
...
Рейтинг: 0 / 0
create temp table
    #39174188
Lonepsycho
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rassvet,

тут вопрос как вы пользуетесь таблицей. если используете в той самой функции где её создавали (т.е. в той самой транзакции), тогда qwwq прав, дело не в этом.
...
Рейтинг: 0 / 0
create temp table
    #39174217
rassvet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, использую в той же самой фукнции в течении одной транзакции
и ошибка выходит на команде создания временной таблицы, а не когда я к ней обращаюсь
...
Рейтинг: 0 / 0
create temp table
    #39174253
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rassvet
SELECT oid FROM pg_class WHERE relname = 't_service'

Код: sql
1.
SELECT tableoid FROM  washer.t_service;



или
Код: sql
1.
SELECT  'washer.t_service'::regclass::oid;



и ещё попробуйте

Код: sql
1.
SELECT 11904532::oid::regclass::text; 



скорее всего ничего не увидите. но вдруг.
...
Рейтинг: 0 / 0
create temp table
    #39174277
rassvet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plsql
1.
SELECT tableoid FROM  washer.t_service;


вернул 161 тыщу записей с значением 4451542
Код: plsql
1.
SELECT  'washer.t_service'::regclass::oid;


вернул 4451542
Код: plsql
1.
SELECT 11904532::oid::regclass::text; 


вернул 11904532
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / create temp table
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]