powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Переменыые для Сесии
13 сообщений из 13, страница 1 из 1
Переменыые для Сесии
    #32935409
s_elected
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет Народ!
У меня вопрос: Есть ли возможность в PG хранить переменные для каждой сесии?
В Oracle это можно было делать с помощью пакетов: объявив в них переменные они хранились для каждого сеанса их можно было менять и работать с ними...
Подскажите как такое можно реализовать в PG8 Win?

Заранее благодарен.
Креативу нет предела ;-)
...
Рейтинг: 0 / 0
Переменыые для Сесии
    #32935621
фффф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Почти все PL-языки сохраняют свои глобальные переменные на уровне сессии - нужно лишь создать словарь данных (хэш) для доступа к переменной по имени. Где-то я видел функции на C, но как всегда под виндами с компиляцией морока. А на перле делается элементарно:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
create or replace  function get_var_text(varname text) returns text as $$
 return $v{$_[ 0 ]};
$$ language plperl;

create or replace  function set_var_text(varname text, value text) returns text as $$
 return $v{$_[ 0 ]} = $_[ 1 ];
$$ language plperl;
...
Рейтинг: 0 / 0
Переменыые для Сесии
    #32935835
wbear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
этой фишки нету в PlPgsql - 100%... в процедурах написаных на сях и plperl есть.. в голом постгресе есть только "встроенные"
...
Рейтинг: 0 / 0
Переменыые для Сесии
    #32935934
Фотография Niemi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
фффф
собирал ли plperl под Windows? если несложно, мог бы сделать небольшое описание?
...
Рейтинг: 0 / 0
Переменыые для Сесии
    #32937555
фффф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, некорректно выразился. SQL и PL/PgSQL не позволяют глобальную переменную сделать. Переформулирую: у каждого серверного процесса есть свои данные, сохраняющиеся в рамках сессии. И некоторые языки позволяют к ним обращаться.

Niemiсобирал ли plperl под Windows?
Нет, пользуюсь готовым (pginstaller). Для компиляции некоторых contrib'ов исходники Постгреса конфигурировал. И сервер собирал, но не пользуюсь. Не очень я с C дружу.
...
Рейтинг: 0 / 0
Переменыые для Сесии
    #32944767
strizh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я для работы с глобальными переменными использую pl/tcl. Да и в доке, когда речь идет о повторном использовании планов выполнения в процедурах, все примеры - на tcl. Но запутанный немного язык, много времени идет, чтобы отловить все баги и процедуру отладить.
...
Рейтинг: 0 / 0
Переменыые для Сесии
    #32954365
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
strizhЯ для работы с глобальными переменными использую pl/tcl. Да и в доке, когда речь идет о повторном использовании планов выполнения в процедурах, все примеры - на tcl. Но запутанный немного язык, много времени идет, чтобы отловить все баги и процедуру отладить.

не подскажите, как насчупать глобальную переменную в Pl/Tcl ???

Например

Код: plaintext
1.
2.
3.
4.
CREATE OR  REPLACE FUNCTION set_textvar(text,text) RETURNS text AS '        
	set GD($1) $2	
	return $GD($1) 
' LANGUAGE pltcl;
SELECT set_textvar('aaa','bbb')
вроде работает. Но как эта переменная выглядит "снаружи"???

ДокаThe global name of this variable is the function's internal name, and the local name is GD. It is recommended that GD be used for private data of a function.

вот такое вот не работает
Код: plaintext
1.
2.
3.
4.
CREATE OR  REPLACE FUNCTION get_textvar(text) RETURNS text AS ' 	
	return $GD($1) 
	# return $aaa
' LANGUAGE pltcl;
SELECT get_textvar('aaa');
что-то я не понимаю, как переменная GD(aaa) видна снаружи ф-ии
...
Рейтинг: 0 / 0
Переменыые для Сесии
    #32960191
strizh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первой строкой тела функции на pltcl должна быть команда

global GD

Если это не сделать - и работать не будет :)
...
Рейтинг: 0 / 0
Переменыые для Сесии
    #32960226
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
strizhПервой строкой тела функции на pltcl должна быть команда

global GD

Если это не сделать - и работать не будет :)
Привел бы вариантик. А то ж я сидю на винде без тисиэлю, что тама и как - в упор не знаю. Всего-то потребовалось ф-ии сбацать для размещения переменной сессии в память и забора ея-же (триггерами, отрабатывающими в этой сессии). Ан надо букварь искать. Харашо, что есть люди, сидящие на линухах, написали (без global и GD, но через upvar) я так понял, что GD() - это типа рекомендованного "соглашения об именах" , а ни фуга не некая встрояенная в pgtcl структура. Если так - то идут они лесом со своим хелпом, где пишется про ихо "предпочтение" имен, но не пишется, чо надо делать "в натуре". Предпочитатели, мля



ЗЫ: Кстати, как поставить pgtcl на 8.0 beta под винду? А то у меня даже dll -ки такой не нашлось. pgperl.dll есть ( но не ставится простым криэйт-ленгом - чё - то надо подкрутить, што ли). А то проверить некий глючок нада (наблюдённый в 7.3. с вызовом SELECT pgtcl_function(); из триггера) ан не на чем.
...
Рейтинг: 0 / 0
Переменыые для Сесии
    #32960297
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, всего лишь соглашение. Но спасибо. Раьотает так (и так , и так ):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE OR  REPLACE FUNCTION set_textvar(text,text) RETURNS text AS ' 
	# global GD
	global assa
	# set GD($1) $2	
	set assa($1) $2
	#return $GD($1)
	return $assa($1)
' LANGUAGE pltcl;
SELECT set_textvar('aaa','bbb')

CREATE OR  REPLACE FUNCTION get_textvar(text) RETURNS text AS ' 
	# global GD
	global assa
	# return $GD($1) 
	return $assa($1)
' LANGUAGE pltcl;
SELECT get_textvar('aaa');
...
Рейтинг: 0 / 0
Переменыые для Сесии
    #32960634
Фотография Niemi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так и не додумался как поставить такие вкусноти plperl, plpython,pltcl под Windows. Может кто поделиться провиденьем? А может стукнет по голове большой и толстой книжкой и отметит страницы.
--
интересно у вас тут
...
Рейтинг: 0 / 0
Переменыые для Сесии
    #32962089
фффф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NiemiЯ так и не додумался как поставить такие вкусноти plperl, plpython,pltcl под Windows. Может кто поделиться провиденьем? А может стукнет по голове большой и толстой книжкой и отметит страницы.

Да я в общем уже написал как.
По шагам:
- скачать и поставить ActiveState Perl;
- убедится что c:\program files\perl\bin прописан в переменную PATH;
Установка переменой окружения на сервис действует только после полной перезагрузки. Может кто знает, как без перезагрузки environment менять?
- доустановить из postgresql-8.msi библиотеку plperl.dll
- выполнить
Код: plaintext
1.
2.
>createlang -U postgres plperl template1
>createlang -U postgres plperlu template1

Остальные ставятся аналогично. TCL качается тоже с activestate.com, питон с оффсайта python.org. Только plpython.dll слинкован с определенной версией библиотеки pythonXX.dll, нужно качать соответствующую версию (2.3 кажется).
...
Рейтинг: 0 / 0
Переменыые для Сесии
    #32962225
Фотография Niemi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
фффф
огромное спасибо, теперь буду пытаться, с Python робовал, но наверно ни 2.4 ни 2.3.5 не проходят, теперь буду смотреть.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Переменыые для Сесии
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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