2019년 5월 3일 금요일

PostgreSQL SET session

PostgreSQL 에 클라이언트로 접속 후,
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

댓글 없음:

댓글 쓰기

화곡 어쩌라고, 굴사냥

석화찜(굴찜)을 먹으러 여의도로 갔다 그런데 재료가 모두 소진되었다고 마감이라고 한다 응? 다들 굴에 미쳤나? 굴을 찾아 헤매다 보니, 화곡까지 가게 되었다. 화곡은 처음 가본다. 첫인상은 "술집 겁네 많네" 피똥쌀때까지 마실 수 있...