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

Фактически, надо хранить да/нет.
...
Рейтинг: 0 / 0
хранение переменной во время транзакции
    #34819520
Ленивец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кроме хранения переменных в ХП с ходу предложить нечего. переменных в TSQL аля MSSQL тут не предвидится(кто знает - поправьте если заблуждаюсь).
...
Рейтинг: 0 / 0
хранение переменной во время транзакции
    #34819550
tadmin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не очень подходит, поскольку в транзакции вызывается множество ХП.
Пришлось бы вводить новый параметр для всех.
...
Рейтинг: 0 / 0
хранение переменной во время транзакции
    #34820053
Алексей Ключников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не помню с какой версии толи с 8.2 толи с 8.3 обещали сделать
темповую таблицу в пределах транзакции, наверно как раз для таких целей.
...
Рейтинг: 0 / 0
хранение переменной во время транзакции
    #34820128
Nick Gazaloff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CREATE TEMP TABLE ... ON COMMIT DROP

В 8.2 работает.
...
Рейтинг: 0 / 0
хранение переменной во время транзакции
    #34820705
tadmin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nick GazaloffCREATE TEMP TABLE ... ON COMMIT DROP
Да, я видел это, и спрашивал так "что, кроме временных таблиц".
Объявление нужной мне временной переменной - очень часто используемая функция, мне кажется, расходы на создание таблицы великоваты для хранения одной записи.
...
Рейтинг: 0 / 0
хранение переменной во время транзакции
    #34820825
Shweik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Значит наверное придется вводить новый параметр в ХП-шках.
...
Рейтинг: 0 / 0
хранение переменной во время транзакции
    #34820930
tadmin`
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ShweikЗначит наверное придется вводить новый параметр в ХП-шках.
Не, слишком накладно. Попробую на временных таблицах потестировать.

схема работы:
- есть фремворк ХП, проверяющих права доступа к объектам, права на действия над ними и прочее.
- есть ХП предметной области "создать договор", "изменить валют договора" ....
- процедуры предметной области открывают транзакцию и пытаются изменить объект, в результате -
- фремворк ищет права на запрошенное действие от общих к частным

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

Поскольку процеду предметной области открывает транзакцию, в которой исполняется все остальное, хочется иметь возможность выставлять флаг "отключить дальнейшие проверки".
Это потребуется в том случае, если имеются общие права, которые перекрывают частные.
Сильная экономия в количестве вызовов.

Очевидно, флаг должен гарантированно сбрасываться по завершении транзакции.
Таблицы ролей, действий и прав небольшие, поэтому все работает довольно быстро.

Может быть я и не прав, но создание таблицы дорогая операция (отдельный файл?), хотя не уверен, что для временных таблиц нет каких-либо особых алгоритмов.
...
Рейтинг: 0 / 0
хранение переменной во время транзакции
    #34822065
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tadminЧто, кроме временных таблиц можно использовать для хранения переменной, которая определяется в транзакции, видна только в рамках транзакции и гарантированно уничтожается после завершения транзакции?

Фактически, надо хранить да/нет.


не знаю насколько поможет, но...
в хранимках (на сях) можно использовать статик переменные. в добавок при создании списков - можно хранить переменные с привязкой к рекордсету выбора(на сервере)...

удачи Вам
(круглый)
ЗЫ
Да, инфа по форточкам...
...
Рейтинг: 0 / 0
хранение переменной во время транзакции
    #34822340
> схема работы

Я бы подумал над нормальной логикой фреймворка, а не искал бы костыли.
...
Рейтинг: 0 / 0
хранение переменной во время транзакции
    #34823360
tadmin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PostreSQL начинающий>
Я бы подумал над нормальной логикой фреймворка, а не искал бы костыли.
Не думаю, что поиск средств хранения транзакционной переменной указывает на ненормальность логики.
Вы видите какие-то принципиально другие решения и можете дать совет?
...
Рейтинг: 0 / 0
хранение переменной во время транзакции
    #34823998
domanix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В postgresql.conf в самом конце нужно в секции

#---------------------------------------------------------------------------
# CUSTOMIZED OPTIONS
#---------------------------------------------------------------------------

custom_variable_classes = '' # list of custom variable class names


Поменять на custom_variable_classes = 'something'

Потом можно в постгре делать

set something.hernya='lalala';
show something.hernya;

или применять в SQL
select set_config('something.hernya','lalala',false)
select current_setting('something.hernya')

Переменная живет пока живет сессия . Т.е если надо управлять ей на уровне транзакции то после старта транзакции ее надо просто обнулить..
...
Рейтинг: 0 / 0
хранение переменной во время транзакции
    #34824407
> Не думаю

Вижу. Imho напрасно.

> Вы видите какие-то принципиально другие решения

И не одно.

> и можете дать совет?

Уже. Подумайте над нормальной логикой фреймворка. "отключить дальнейшие проверки" - для чего и потребовалось хранить переменную - это кривые костыли.
...
Рейтинг: 0 / 0
хранение переменной во время транзакции
    #34824498
tadmin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
domanix
set something.hernya='lalala';

спаибо, не знал
...
Рейтинг: 0 / 0
хранение переменной во время транзакции
    #34826087
valera_k2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вроде pgperl это умеет
...
Рейтинг: 0 / 0
хранение переменной во время транзакции
    #34830707
tadmin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Способ со временной таблицей вполне подошел.
Единственно - я запнулся об известную особенность с кешированием запроса из функции,
вот тут это подробно разобрали:
http://archives.postgresql.org/pgsql-interfaces/2007-02/msg00006.php

Если временная таблица создается в теле функции, необходимо использовать execute для всех операций с этой таблицей. В противном случае при первом исполнении кешируется OID и дальнейшие вызовы будут вызывать ошибки, что и понятно, таблица то каждый раз создается заново, получая новый OID.


<тело функции>
execute 'CREATE TEMP TABLE access_level(acl integer) ON COMMIT DROP';

-- и все операции тоже делаем через execute
execute 'insert into access_level values(1)';

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


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