2017-01-03 20:56 GMT+01:00 Fabien COELHO <coe...@cri.ensmp.fr>: > > Hello, > > Probably there is not big difference between RESET and UNDO in complexity >> of implementation. You have to do partial implementation of MVCC. No >> simple >> code. >> > > I think so; yes; indeed. > > Also note that user-defined GUCs already implements the transactional >>> property, so probably the mecanism is already available and can be >>> reused. >>> >> >> GUC are stack based - the value doesn't depends if transaction was >> successful or not. >> > > Hmmm... this looks transactional to me: > > SELECT set_config('x.x', 'before', FALSE); -- 'before' > BEGIN; > SELECT set_config('x.x', 'within', FALSE); -- 'within' > ROLLBACK; > SELECT current_setting('x.x'); -- 'before' > BEGIN; > SELECT set_config('x.x', 'inside', FALSE); -- 'inside' > COMMIT; > SELECT current_setting('x.x'); -- 'inside' > > I would say the stack is needed for SAVEPOINT: > > SELECT set_config('x.x', 'before', FALSE); -- 'before' > BEGIN; > SELECT set_config('x.x', 'within', FALSE); -- 'within' > SAVEPOINT within; > SELECT set_config('x.x', 'inside', FALSE); -- 'inside' > SELECT current_setting('x.x'); -- 'inside' > ROLLBACK TO SAVEPOINT within; > SELECT current_setting('x.x'); -- 'within' > SELECT set_config('x.x', 'further', FALSE); -- 'further' > ROLLBACK; > SELECT current_setting('x.x'); -- 'before' > > So basically the use case needs GUCs with some access control. Or just > role-private GUCs and some access function tricks would do as well for the > use case. At least it is probably much easier to add privacy to gucs than > to (re)implement permissions and MVCC on some session variables. And it > would be nice if GUCs could be typed as well...
With respect, I don't share your opinion - it is not enough for usage like package variables - there usually should not to use any dependency on transactions. More it is dynamic - it should be hard inconsistency to implement CREATE or DECLARE statement for GUC. So it is out my proposal (and my goal). Regards Pavel > > > -- > Fabien. >