Session hash tools. The functions in this package are designed to get or set individual values in PL/Perl global hash. They support 3 levels of nesting, meaning that you can create hashes and subhashes (more correctly hash references) as elements of a $_GLOBAL hash as well as individual records. WARNING: since %_GLOBAL hash is not shared between PL/Perl and PL/PerlU instances you won't have access to the values set by these functions from untrusted PL/Perl. You can, of course, 'fix' this by changing the language of the functions from plperl to plperlu, however, you can't have access to the same hash values from both trusted and untrusted versions of PL/Perl. This work is sponsored by Enova Financial (http://enovafinancial.com) Installation: make && make install. Start the $dbname createlang plperl $dbname psql -c "CREATE SCHEMA tools" $dbname psql -f $PGDATA/share/contrib/tools.sql $dbname Usage: There are 3 functions for each get or set operation. The first one takes 2 arguments and creates 'nested' hashes. The second is one-argument and deals with values directly in the %_GLOBAL hash, and the last one provides 2-level nesting for the hashes, i.e. tools.session__set(key1 TEXT, key2 TEXT, value TEXT) equals to %_GLOBAL{$key1}{$key2} = $value tools.session__set(key TEXT, value TEXT) is %_GLOBAL{$key} = $value tools.session__set(key1 TEXT, key2 TEXT, key3 TEXT, value TEXT) equals to %_GLOBAL{$key1}{$key2}{$key3} = $value if value argument is NULL then the corresponding key is cleared from the %_GLOBAL hash. Corresponding get functions are: tools.session__get(key1 TEXT, key2 TEXT) tools.session__get(key TEXT) tools.session__get(key1 TEXT, key2 TEXT, key3 TEXT) Note that undef is returned if the key is missing in the hash. Also accessing the hash value with function that takes more or less arguments than there are hash keys will result in error message. To clear hash keys en masse use tools.session__clean(mode TEXT, keys TEXT), where mode can be either 'keep' or 'delete', and keys are the comma-separated string of key names, i.e. tools.session__clean('delete', 'a, b, c, d') removes keys from 'a' to 'd' from the %_GLOBAL hash. Note that only keys in %_GLOBAL itself are removed with this function, to remove a subkey in a nested hash use session__set with NULL as the value argument. To remove all keys from the hash call tools.session__reset(). Finally, to display all %_GLOBAL hash keys (including nested ones) use tools.session__list();