source

Postgre 기록 방법SQL 쿼리?

ittop 2023. 5. 7. 11:51
반응형

Postgre 기록 방법SQL 쿼리?

Postgre에서 실행되는 모든 SQL의 로깅을 활성화하는 방법SQL 8.3?

편집됨(추가 정보) 다음 행을 변경했습니다.

log_directory = 'pg_log'                    
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_statement = 'all'

Postgre를 다시 시작합니다.SQL 서비스...로그가 생성되지 않았습니다.Windows Server 2003을 사용하고 있습니다.

아이디어 있어요?

당신의data/postgresql.conf파일, 파일 변경log_statement설정'all'.


편집

귀하의 새로운 정보를 보면 다음과 같은 몇 가지 다른 설정이 있을 수 있습니다.

  • 전원을 켰는지 확인합니다.log_destination변수
  • 반드시 전원을 켜십시오.logging_collector
  • 또한 확인하십시오.log_directory디렉토리가 이미 내부에 있습니다.data포스트그레스 사용자가 작성할 수 있는 디렉토리입니다.

편집하기/etc/postgresql/9.3/main/postgresql.conf다음과 같이 행을 변경합니다.

참고: 파일을 찾지 못한 경우postgresql.conf파일을 입력한 다음 입력합니다.$locate postgresql.conf종착역에서.

  1. #log_directory = 'pg_log' 로. log_directory = 'pg_log'

  2. #log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' 로. log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'

  3. #log_statement = 'none' 로. log_statement = 'all'

  4. #logging_collector = off 로. logging_collector = on

  5. 선택 사항:SELECT set_config('log_statement', 'all', true);

  6. sudo /etc/init.d/postgresql restart 또는 sudo service postgresql restart

  7. postgresql의 화재 쿼리select 2+2

  8. 현재 로그인 찾기/var/lib/pgsql/9.2/data/pg_log/

로그 파일은 시간이 지남에 따라 크게 증가하는 경향이 있으며 시스템이 손상될 수 있습니다.안전을 위해 로그를 삭제하고 postgresql 서버를 다시 시작하는 bash 스크립트를 작성합니다.

@paul, @Jarret Hardie, @Zoltan, @Rix Beck, @Latif Premani에게 감사합니다.

참고: 다른 솔루션은 기본 데이터베이스의 문만 기록합니다(일반적으로).postgres—다른 사용자를 로그에 기록하고, 해당 사용자의 솔루션으로, 다음을 수행합니다.

ALTER DATABASE your_database_name
SET log_statement = 'all';

참조: https://serverfault.com/a/376888 /

SELECT set_config('log_statement', 'all', true);

해당 사용자 권한은 연결 후 위의 쿼리를 사용할 수 있습니다.이는 세션이 종료될 때까지 로깅에 영향을 미칩니다.

또한 Postgre에서 이 행을 추가해야 합니다.SQL 및 서버 재시작:

log_directory = 'pg_log'                    
log_filename = 'postgresql-dateformat.log'
log_statement = 'all'
logging_collector = on

세트log_statement로.all:

오류 보고 및 로깅 - log_statement

+1에서 위의 답까지.다음 구성을 사용합니다.

log_line_prefix = '%t %c %u ' # time sessionid user
log_statement = 'all'

Postgre를 실행하는 CentOS 6.4(Red Hat 4.4.7-3)에 대한 자세한 내용을 보려면 다음과 같이 하십시오. 웹 페이지의 지침에 따라 SQL 9.2:

  1. 집합(주석 없음)log_statement = 'all'그리고.log_min_error_statement = error/var/lib/pgsql/9.2/data/postgresql.conf.
  2. Postgre 다시 로드SQL 구성입니다.저에게, 이것은 달리는 것에 의해 이루어졌습니다./usr/pgsql-9.2/bin/pg_ctl reload -D /var/lib/pgsql/9.2/data/.
  3. 오늘의 로그인 찾기/var/lib/pgsql/9.2/data/pg_log/

postgresql에 이에 대한 확장이 있습니다.이름은 "pg_stat_stat_stats"입니다.https://www.postgresql.org/docs/9.4/pgstatstatements.html

기본적으로 postgresql.conf 파일을 약간 변경해야 합니다.

shared_preload_libraries= 'pg_stat_statements'
pg_stat_statements.track = 'all'

그런 다음 DB에 로그인하고 다음 명령을 실행해야 합니다.

create extension pg_stat_statements;

이름이 "pg_stat_stat_stats"인 새 보기가 생성됩니다.이 보기에서는 실행된 모든 쿼리를 볼 수 있습니다.

또한 모든 문을 기록하도록 이 매개 변수를 설정해야 합니다.

log_min_duration_statement = 0

동적으로 두 가지 방법으로 로깅을 활성화/비활성화할 수 있습니다.

  1. DB에서 글로벌 변수를 변경하고 구성을 다시 로드합니다. a) log_statement = 'all'; 또는 log_min_session_statement = 0; b) pg_session_conf를 선택합니다.
  2. Linux 명령줄에서 postgres 구성 파일을 편집하고 log_min_syslog_statement = 0 log_statement = 'all' 구성 파일 su - postgres /usr/bin/pg_ctl 다시 로드

이 두 경우 모두 Postgres를 다시 시작하면 안 됩니다.구성 다시 로드를 통해 로깅을 동적으로 활성화/비활성화할 수 있습니다.

이것이 도움이 되기를 바랍니다.

한 후 를 다시 시작해야 .SQL을 통해 로깅을 지속적으로 사용할 수 있습니다.*사용하는 매개 변수ALTER SYSTEM SET으로 설정됨postgresql.auto.confpostgresql.conf:

ALTER SYSTEM SET log_statement = 'all';

그리고 아래 쿼리 중 하나를 실행한 후 Postgre를 다시 시작해야 합니다.로깅을 지속적으로 사용하지 않도록 설정하는 SQL:

ALTER SYSTEM RESET log_statement;

또는:

ALTER SYSTEM SET log_statement = 'none';

아래 쿼리를 실행한 후 Postgre를 다시 시작해야 합니다.로깅을 지속적으로 사용하도록 설정하는 SQL:

ALTER SYSTEM SET log_min_duration_statement = 0;

또한 아래 쿼리 중 하나를 실행한 후 Postgre를 다시 시작해야 합니다.로깅을 지속적으로 사용하지 않도록 설정하는 SQL:

ALTER SYSTEM RESET log_min_duration_statement;

또는:

ALTER SYSTEM SET log_min_duration_statement = -1;

아래 쿼리는 로깅을 지속적으로 사용하거나 사용하지 않도록 설정할 수 없습니다.

SET SESSION log_statement = 'all'
SET log_statement = 'all'
SET LOCAL log_statement = 'all'
SET SESSION log_min_duration_statement = 0;
SET log_min_duration_statement = 0;
SET LOCAL log_min_duration_statement = 0;

또는:

RESET log_statement;
SET SESSION log_statement = 'none'
SET log_statement = 'none'
SET LOCAL log_statement = 'none'
RESET log_min_duration_statement;
SET SESSION log_min_duration_statement = -1;
SET log_min_duration_statement = -1;
SET LOCAL log_min_duration_statement = -1;

나는 그것을 설정하려고 노력했습니다.log_statement일부 postgres 구성 파일에서 파일을 읽었지만 실제로는 우리 postgres에서 읽지 않았습니다.

요청을 사용하여 확인했습니다.

select *
from pg_settings

[...]
log_statement   none # That was not the value i was expected for !!!

저는 이 방법을 사용합니다. https://stackoverflow.com/a/41912295/2294168

command: postgres -c config_file=/etc/postgresql.conf

언급URL : https://stackoverflow.com/questions/722221/how-to-log-postgresql-queries

반응형