Переменная из php в триггер

micolo

Новичок
Переменная из php в триггер

Доброго времени суток!

У меня такой вопрос - можно ли как нибудь из PHP передать переменную в триггер? Если да - то каким образом.
Спасибо!
 

micolo

Новичок
Я делаю аудит на таблицу, проблема в том что пользователи у меня не пользователи базы, а пользователи которые которые просто хранятся в таблице и их id передаётся в виде сессии PHP. Мне нужно чтобы при срабатывании этого триггера я мог записать в таблицу аудита id этих пользователей.
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: micolo
Я делаю аудит на таблицу, проблема в том что пользователи у меня не пользователи базы, а пользователи которые которые просто хранятся в таблице и их id передаётся в виде сессии PHP. Мне нужно чтобы при срабатывании этого триггера я мог записать в таблицу аудита id этих пользователей.
В триггер передаются две вещи:
1) old / new --- значение строки, для которой вызван триггер,
2) tg_argv --- параметры функции. Задаются они при создании триггера, и поэтому Alexandre гонит: передать через них ничего не получится.

Так что надо этот id держать либо в какой-то таблице и в триггере из неё читать, либо можно прописать в postgresql.conf
Код:
custom_variable_classes = 'application'
в приложении делать
Код:
set session application.userid = $userid
а в триггере читать этот "конфигурационный параметр" через show.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
еще вариант - на plperl можно объявить глобальную переменную
я делаю ф-ции сеттер и геттер на перле
в начале сессии (при соединении PHP с базой) вызываю сеттер
в нужных процедурах получаю user_id := user_id();
 

oktogen

Новичок
Хороший вариант как тут сказали - использовать переменные сессии, как в мускуле.
В postgresql.conf в самом конце нужно в секции
#---------------------------------------------------------------------------
# CUSTOMIZED OPTIONS #---------------------------------------------------------------------------
custom_variable_classes = ''
# list of custom variable class names
Поменять на custom_variable_classes = 'something'
Потом можно в постгре делать
select set_config('something.hernya','lalala',false); select current_setting('something.hernya')
Переменная имеет текстовый тип, поэтому её нужно преобразовывать к любому другому типу.
Посредством CAST(current_setting('something.hernya') AS MYTYPE)
 
Сверху