powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Временные таблицы
4 сообщений из 4, страница 1 из 1
Временные таблицы
    #32893524
джанкер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В процедуре используются временные таблицы
при первом запуске всё нормально работает
при последующих - ошибка
если закрыть сессию и открыть её заново
опять первый запуск - нормально
далее опять ошибка


создаётся таблица внутри процедуры: CREATE TEMPORARY TABLE no_enough_qty (goods_id INT4) ON COMMIT DROP;
после выполнения всех манипуляций с ней она удаляется: DROP TABLE no_enough_qty;

вот сопсна как всё происходит:

storage_db=# SELECT __proc_add_operation_outgoing(2,4,1,ARRAY[10,11],ARRAY[1,1],ARRAY[220,240],ARRAY[-1,-1]);
__proc_add_operation_outgoing
-------------------------------
{0}
(1 запись)

storage_db=# SELECT __proc_add_operation_outgoing(2,4,1,ARRAY[10,11],ARRAY[1,1],ARRAY[220,240],ARRAY[-1,-1]);
ERROR: relation with OID 27112 does not exist
КОНТЕКСТ: SQL statement "INSERT INTO no_enough_qty (goods_id) VALUES ( $1 [ $2 ])"
PL/pgSQL function "__proc_add_operation_outgoing" line 38 at SQL statement
storage_db=#


пробовал и так:
BEGIN;
SELECT __proc_add_operation_outgoing(2,4,1,ARRAY[10,11],ARRAY[1,1],ARRAY[220,240],ARRAY[-1,-1]);
COMMIT;

результат такойже
подскажите плиз как побороть это
...
Рейтинг: 0 / 0
Временные таблицы
    #32893568
Sad Spirit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Работать с временными таблицами надо через EXECUTE. Процедура при первом выполнении "компилируется" и при следующем вызове происходит обращение к несуществующему объекту.
...
Рейтинг: 0 / 0
Временные таблицы
    #32893779
джанкер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ага
сенкс
уже разобрался

))
...
Рейтинг: 0 / 0
Временные таблицы
    #32893868
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sad SpiritРаботать с временными таблицами надо через EXECUTE. Процедура при первом выполнении "компилируется" и при следующем вызове происходит обращение к несуществующему объекту.

у меня такое было не только с времянками, но и с первичным ключом. (в процедуре было DROP PKey ..... CREATE ... PKey. Криэйт сразу пришлось вешать на EXECUTE (процедура не хотела даже компилироваться как SQL проца - ругалась на невозможность создания второго п-кея - пришлось перейти на plpgSQL и EXECUTE). А DROP пришлось повесить на EXECUTE после первого запуска (PKey тоже был распознан как OID, который после первого пуска изменился). Другие констрайнты (в частности ф-кеи и индексы) передаются (в откомпиленную процедуру) по именам.



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


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