2012-12-27 2 views

답변

0

월마트 파일에 사용되는 바이너리 인코딩의 유형 실제 데이터베이스 파일 자체와 동일한 형식이며 사용중인 PostgreSQL의 정확한 버전에 따라 다릅니다. 정확한 형식을 결정하려면 특정 버전의 소스 코드를 검사해야 할 것입니다.

+0

당신은 내가 그 WAL 기록 파일을 읽는 자바 코드를 시도 해당 버전에 대한 인코딩 될 것입니다 무엇을 말해 줄 수 9.1.6를 사용하고 있습니다 하지만 어떤 의미가 있어도 아무런 의미가 없습니다. – user1802481

+0

실제 PostgreSQL 인코딩에 대해 구체적으로 알지는 못합니다. 너 스스로 조사해야 해. –

+0

@ user1802481 wal 파일은 공식적인 사양이없는 postgresql 내부 형식입니다. postgresql 코드에서 형식에 대한 규격을 작성하는 것은 수십, 아마도 수백 페이지가 될 것이고, 오히려 stackoverflow의 응답 범위를 벗어납니다. – nos

4

정말 그렇게 할 수 없습니다. WAL 아카이브에서 바이트를 읽는 것은 쉽지만, 의 의미를 만들려는 것 같습니다.. 당신은 그것으로 고투 할 것입니다.

WAL 아카이브는 데이터베이스에서 변경된 블록을 보여주는 바이너리 로그입니다. SQL 수준 또는 행 수준 변경 로그가 아니므로 변경된 행 목록을 가져올 수는 없습니다.

트리거 기반 복제 또는 감사 트리거를 조사하는 것이 좋습니다.

3

다른 답변과 마찬가지로 형식이 복잡하고 수준이 낮습니다. xlogdump

일반적인 방법에 : 당신이 배우고 저장된 데이터를 이해하고 소스로부터 바이너리를 빌드하는 방법을 알 수있는 시간이있는 경우

그러나, 버전 게시 된 독자 8.39.2에있다 그것과 같다 빌드 있는 contrib (포스트 그레스 부가) :

  • 먼저 당신이 WAL 데이터를 보려는 포스트 그레스의 버전에 대한 소스를 얻을.
    • ./configuremake이 있지만 필요가 그런 xlogdump를 위해 (해당 폴더의 자식 클론이 잘 작동)을 있는 contrib 폴더에
    • 실행 make을 xlogdump 폴더를 복사
  • 를 설치하지 않으려면 - 그것을 부모 postgres 구조를 찾고 바이너리를 빌드해야합니다.

바이너리를 경로에 복사하거나 그 위치에서 사용할 수 있습니다. 주의해야 할 점은 Postgres에 대한 내부 지식이 여전히 많이 필요하다는 것입니다. 데이터베이스를 사용할 수있는 경우 이며 로그에서 SQL 문을 취소 할 수 있습니다.

자바에서이를 수행하려면 실행 파일을 포장 수 중, 하이브리드로 C 라이브러리를 연결하거나 소스에서 필요한 구문 분석을 수행하는 방법을 알아낼. 이러한 옵션 중 많은 부분이 많은 세부 작업이 필요합니다. WAL 파일을 읽을 수 pg_xlogdump를 사용

3

(이있는 contrib 프로그램은 PG 9.3 버전 추가 - PG 9.3 released doc를)

이 유틸리티 만이 필요하기 때문에 서버, 을 설치 한 사용자 읽기 전용 액세스를 실행할 수 있습니다 데이터 디렉토리.예를 들어

pg_xlogdump --help 
pg_xlogdump decodes and displays PostgreSQL transaction logs for debugging. 

Usage: 
    pg_xlogdump [OPTION]... [STARTSEG [ENDSEG]] 

Options: 
    -b, --bkp-details  output detailed information about backup blocks 
    -e, --end=RECPTR  stop reading at log position RECPTR 
    -f, --follow   keep retrying after reaching end of WAL 
    -n, --limit=N   number of records to display 
    -p, --path=PATH  directory in which to find log segment files 
         (default: ./pg_xlog) 
    -r, --rmgr=RMGR  only show records generated by resource manager RMGR 
         use --rmgr=list to list valid resource manager names 
    -s, --start=RECPTR  start reading at log position RECPTR 
    -t, --timeline=TLI  timeline from which to read log records 
         (default: 1 or the value used in STARTSEG) 
    -V, --version   output version information, then exit 
    -x, --xid=XID   only show records with TransactionId XID 
    -z, --stats[=record] show statistics instead of records 
         (optionally, show per-record statistics) 
    -?, --help    show this help, then exit 

: pg_xlogdump 000000010000005A00000096

PostgreSQL Document 또는 this blog

관련 문제