SET 명령어를 통해 환경설정 값을 변경할 수 있다.
변경을 하면, 현재 자신이 연결된 session 에만 영향을 준다.
다른 session 에는 영향을 주지 않는다.
물론, session 이 close 되면, 환경설정 값들은 사라지게 된다.
session 으로 연결된 상태에서 환경설정 값을 변경할 수 있다.
모든 환경설정이 다 되는 것은 아니다.
context 가 superuser 혹은 user 인 환경설정만 가능하다.
superuser 인 것은 superuser 권한이 있어야 한다.
postgres=# select name,setting,context from pg_settings where context = 'superuser' or context = 'user';
set 으로 변경이 불가능한 환경설정인 경우에는 에러가 발생한다.
ERROR: parameter "allow_system_table_mods" cannot be changed without restarting the server |
set 으로 변경 가능한 환경설정 중에서 'wal_compression' 을 변경해 보자.
현재 off 값이 셋팅되어 있다.
3가지 방법으로 확인할 수 있다.
3가지 방법 중 원하는 방법으로 확인하면 된다.
postgres=# select name,setting,context from pg_settings where name = 'wal_compression';
postgres=# show wal_compression;
postgres=# select current_setting('wal_compression');
postgres=# set session wal_compression = on;
postgres=# select name,setting,context from pg_settings where name = 'wal_compression';
postgres=# show wal_compression;
postgres=# select current_setting('wal_compression');
set session 말고, set local 옵션도 있다.
set local 은 transaction 안에서만 사용할 수 있고, transaction 안에서만 유효하다.
transaction 안에서만 사용할 수 있다고 메세지가 나온다.
transaction 안에서만 사용 가능하고, transaction 이 끝나면 다시 원래대로 돌아온다.
transaction 안에서 set session 을 수행하면, commit 여부에 따라 결과가 달라진다.
rollback 을 수행하면 적용되지 않는다.
commit 을 수행하면 적용된다.
※ set 다음에 session, local 을 생략할 수 있다. 생략을 하면 session 으로 동작하게 된다.
set 대신에 set_config() 를 사용할 수 있다.
함수 원형은 아래와 같다.
set_config(setting_name, new_value, is_local)
세번째 인자 값에 따라 결과가 달라진다.
출처
https://www.postgresql.org/docs/10/sql-set.html
https://www.postgresql.org/docs/10/sql-show.html
https://www.postgresql.org/docs/10/config-setting.html
https://www.postgresql.org/docs/10/runtime-config.html
https://www.postgresql.org/docs/10/functions-admin.html
댓글 없음:
댓글 쓰기