PostgreSQL, SQL, Базы данных

PostgreSQL: Установка пользовательских параметров базы данных и/или сессии

Через запрос show all можно посмотреть текущие значения параметров postgres времени выполнения. Но в добавок к имеющимся системным параметрам можно создать и свои, пользовательские.

Имена пользовательских параметров обязательно должны содержать точку, например, my.version, mydb.parameter и т.д. Установить значения этих параметров можно для сессии и/или для конкретной базы данных. Новое значение для базы данных будет считано при новом подключении к ней. В текущем подключении — будет считано предыдущее значение.

Для установки значения параметра для сессии — команда

set <parameter_name> to <value>;

Для конкретной базы данных —

alter database <db_name> set <parameter_name> = <value>;

Подробнее здесь: https://www.postgresql.org/docs/current/config-setting.html. Важно: установить значение пользовательского параметра в контексте базы данных возможно, если такой параметр уже был когда-то определен для сессии.

Получить значение параметра можно через функцию current_setting(<parameter_name>) или show <parameter_name>.

Пример функции получения версии (дата последнего изменения) базы данных:

[pastacode lang=»sql» manual=»CREATE%20OR%20REPLACE%20FUNCTION%20public.db_version(%0A%09)%0A%20%20%20%20RETURNS%20timestamp%20with%20time%20zone%0A%20%20%20%20LANGUAGE%20’plpgsql’%0A%20%20%20%20COST%20100%0A%20%20%20%20VOLATILE%20PARALLEL%20UNSAFE%0AAS%20%24BODY%24%0Abegin%0A%20%20%20%20return%20(select%20current_setting(‘my.version’)%3A%3Atimestamp%20with%20time%20zone)%3B%0A%20%20%20%20exception%0A%20%20%20%20when%20others%20then%0A%20%20%20%20%20%20%20%20set%20my.version%20to%20’1900-01-01%2000%3A00’%3B%0A%20%20%20%20%20%20%20%20alter%20database%20mydatabasename%20set%20my.version%20from%20current%3B%0A%20%20%20%20return%20’1900-01-01%2000%3A00’%3A%3Atimestamp%20with%20time%20zone%3B%0Aend%3B%0A%24BODY%24%3B» message=»» highlight=»» provider=»manual»/]

Если указанный параметр не известен сессии, то произойдет его инициализация. В противном случае — будет возвращено текущее значение.

[pastacode lang=»sql» manual=»alter%20database%20makro%20set%20my.version%20%3D%20’2022-09-30%2010%3A07’%3B» message=»Установка нового значения параметра my.version» highlight=»» provider=»manual»/]