| PostgreSQL 9.3.25 문서 | ||||
|---|---|---|---|---|
| 이전 | PostgreSQL : 문서 : 9.3 : 추가 제공 배트맨 토토 | 부록 F. 추가 제공 모듈 | 다음 | |
그postgres_fdw모듈은 다음을 제공합니다. 외부 데이터 래퍼postgres_fdw, 외부에 저장된 데이터에 액세스하는 데 사용할 수 있습니다.포스트그레SQL서버.
이 모듈이 제공하는 기능은 실질적으로 겹칩니다. 이전 기능과 함께dlink모듈. 하지만postgres_fdw더 투명하고 롤 토토 테이블에 액세스하기 위한 표준 호환 구문이며 많은 경우에 더 나은 성능을 제공합니다.
다음을 사용하여 원격 액세스를 준비하려면postgres_fdw:
설치postgres_fdw확장 사용 중PostgreSQL : 문서 : 9.3 : 토토 생성.
다음을 사용하여 외부 서버 객체 생성서버 생성, 각 리모콘을 나타냄 연결하려는 데이터베이스. 연결 정보를 지정하고, 제외사용자그리고비밀번호, 서버 개체의 옵션으로.
다음을 사용하여 사용자 매핑 생성사용자 매핑 생성, 각 각 외부 서버에 대한 액세스를 허용하려는 데이터베이스 사용자입니다. 사용할 원격 사용자 이름과 비밀번호를 지정하세요.사용자그리고비밀번호옵션 사용자 매핑의.
다음을 사용하여 외부 테이블 생성외부 테이블 생성, 각 액세스하려는 롤 토토 테이블. 외부 테이블의 열 참조된 롤 토토 테이블과 일치해야 합니다. 그러나 테이블을 사용할 수 있습니다 및/또는 롤 토토 테이블의 열 이름과 다른 경우 외부 테이블의 옵션으로 올바른 롤 토토 이름을 지정하십시오. 개체.
이제 당신에게 필요한 것은선택외국인에게서 기본 원격 테이블에 저장된 데이터에 액세스합니다. 당신 다음을 사용하여 원격 테이블을 수정할 수도 있습니다.삽입, 업데이트, 또는삭제. (물론 원격 사용자는 사용자 매핑에 지정된 사용자는 다음 작업을 수행할 수 있는 권한이 있어야 합니다. 이런 것들.)
일반적으로 외부 테이블의 열은 다음을 수행하는 것이 좋습니다. 정확히 동일한 데이터 유형으로 선언되어야 하며, 원격 테이블의 참조 열로 적용 가능합니다. 그래도postgres_fdw현재는 오히려 필요에 따라 데이터 유형 변환을 수행하는 것을 용서하고, 유형이나 데이터 정렬이 수행될 때 놀라운 의미론적 이상이 발생할 수 있습니다. 원격 서버 해석으로 인해 일치하지 않습니다.어디절이 로컬과 약간 다릅니다. 서버.
외부 테이블은 더 적은 수의 열로 선언될 수 있습니다. 기본 롤 토토 테이블과 열 순서가 다릅니다. 있다. 열과 롤 토토 테이블의 일치는 이름이 아닌 이름을 기준으로 이루어집니다. 위치.
다음을 사용하는 외부 서버postgres_fdw외부 데이터 래퍼는 동일한 것을 가질 수 있습니다 해당 옵션libpq다음에서 수락 설명된 대로 연결 문자열섹션 31.1.2, 제외 다음 옵션은 허용되지 않습니다.
사용자그리고비밀번호(사용자 매핑을 위해 이를 지정합니다. 대신)
client_encoding(이것은 자동으로 로컬 서버 인코딩에서 설정)
fallback_application_name(항상 설정됨 에postgres_fdw)
수퍼유저만이 비밀번호 없이 외부 서버에 연결할 수 있습니다 인증을 수행하므로 항상를 지정하십시오.비밀번호다음에 속한 사용자 매핑에 대한 옵션 슈퍼유저가 아닙니다.
이 옵션은 SQL에서 사용되는 이름을 제어하는 데 사용할 수 있습니다 명령문이 리모컨으로 전송됨PostgreSQL서버. 이런 옵션이 필요합니다 외부 테이블이 다른 이름으로 생성된 경우 기본 원격 테이블의 이름입니다.
외부 테이블에 지정할 수 있는 이 옵션은 다음을 제공합니다. 원격 서버의 외부 테이블에 사용할 스키마 이름입니다. 이 옵션을 생략하면 외부 테이블의 스키마 이름이 사용됩니다.
외부 테이블에 지정할 수 있는 이 옵션은 다음을 제공합니다. 원격 서버의 외부 테이블에 사용할 테이블 이름입니다. 이 옵션을 생략하면 외부 테이블의 이름이 사용됩니다.
이 옵션은 외부 컬럼에 지정할 수 있습니다. 테이블은 원격의 열에 사용할 열 이름을 제공합니다. 서버. 이 옵션을 생략하면 해당 컬럼의 이름이 사용됩니다.
postgres_fdw다음을 통해 원격 데이터를 검색합니다. 원격 서버에 대해 쿼리를 실행하므로 이상적으로는 예상 외부 테이블을 스캔하는 데 드는 비용은 얼마든지 되어야 합니다. 원격 서버에서 수행되며 통신에 약간의 오버헤드가 추가됩니다. 이러한 견적을 얻는 가장 확실한 방법은 리모콘에 문의하는 것입니다. 서버에 추가한 다음 오버헤드를 위해 뭔가를 추가합니다. 하지만 간단하게는 추가 원격 쿼리 비용을 지불할 가치가 없을 수도 있습니다. 비용 견적을 얻으려면. 그래서postgres_fdw비용 추정 방법을 제어하기 위해 다음 옵션을 제공합니다. 완료:
이 옵션은 외부 테이블 또는 외부 서버, 여부 제어postgres_fdw롤 토토 문제설명비용 견적을 얻기 위한 명령입니다. 설정 외부 테이블의 경우 해당 서버의 모든 설정을 재정의하지만 그 테이블을 위해. 기본값은거짓.
외부 서버에 지정할 수 있는 이 옵션은 예상 시작 비용에 추가되는 숫자 값 해당 서버에서 외부 테이블을 스캔합니다. 이는 추가를 나타냅니다. 연결 설정, 구문 분석 및 계획에 대한 오버헤드 롤 토토 측에서 쿼리 등을 수행합니다. 기본값은100.
외부 서버에 지정할 수 있는 이 옵션은 튜플당 추가 비용으로 사용되는 숫자 값 해당 서버에서 외부 테이블을 검색합니다. 이는 추가를 나타냅니다. 서버 간 데이터 전송 오버헤드. 증가하거나 더 높거나 더 낮은 네트워크 지연을 반영하려면 이 숫자를 줄이십시오. 원격 서버. 기본값은0.01.
언제use_remote_estimate사실입니다,postgres_fdw행 수와 비용을 얻습니다. 원격 서버에서 추정한 다음 추가합니다fdw_startup_cost그리고fdw_tuple_cost비용 견적에. 언제use_remote_estimate거짓입니다,postgres_fdw로컬 행 수 및 비용을 수행합니다. 추정 후 추가fdw_startup_cost그리고fdw_tuple_cost비용 견적에. 이 지역 추정치는 지역이 아닌 한 매우 정확할 가능성이 없습니다. 롤 토토 테이블의 통계 사본을 사용할 수 있습니다. 실행 중PostgreSQL : 문서 : 9.3 : 토토 커뮤니티외국 테이블에는 로컬 통계를 업데이트하는 방법; 그러면 스캔이 수행됩니다. 원격 테이블을 사용하여 마치 것처럼 통계를 계산하고 저장합니다. 테이블은 현지였습니다. 지역 통계를 유지하는 것이 유용한 방법이 될 수 있습니다. 원격 테이블에 대한 쿼리별 계획 오버헤드를 줄이기 위해 — 하지만 원격 테이블은 자주 업데이트되며 로컬 통계는 곧 쓸모 없게 될 것입니다.
기본적으로 모든 외부 테이블은 다음을 사용합니다.postgres_fdw업데이트 가능한 것으로 가정됩니다. 이것은 다음 옵션을 사용하여 재정의됩니다.
이 옵션은 다음 여부를 제어합니다.postgres_fdw외부 테이블 수정을 허용합니다. 사용 중삽입, 업데이트그리고삭제명령. 외부 테이블이나 외부 서버에 대해 지정할 수 있습니다. 에이 테이블 수준 옵션은 서버 수준 옵션보다 우선 적용됩니다. 기본값은참.
물론, 원격 테이블이 실제로 업데이트 가능하지 않은 경우, 어쨌든 오류가 발생합니다. 이 옵션을 사용하면 주로 원격 서버에 쿼리하지 않고 로컬에서 오류가 발생합니다. 참고 그러나 그information_schema조회수 보고할 예정입니다.postgres_fdw외국 테이블 이 옵션의 설정에 따라 업데이트 가능 여부를 결정합니다. 원격 서버를 확인하지 않고.
postgres_fdw연결을 설정합니다 외부 서버를 사용하는 첫 번째 쿼리 중에 외부 서버로 외부 서버와 관련된 테이블. 이 연결은 유지됩니다 동일한 세션의 후속 쿼리에 재사용됩니다. 그러나 만일 여러 사용자 ID(사용자 매핑)를 사용하여 액세스합니다. 외부 서버, 각 사용자마다 연결이 설정됩니다. 매핑.
외부 시스템의 롤 토토 테이블을 참조하는 쿼리 중 서버,postgres_fdw거래를 엽니다 원격 서버에 해당 서버가 아직 열려 있지 않은 경우 현재 로컬 트랜잭션. 원격 트랜잭션이 커밋되었습니다. 또는 로컬 트랜잭션이 커밋되거나 중단될 때 중단됩니다. 세이브포인트 해당 원격을 생성하여 유사하게 관리됩니다. 저장점.
원격 트랜잭션은 다음을 사용합니다.직렬화 가능로컬 격리 수준 거래가 있음직렬화 가능격리 수준; 그렇지 않으면 다음을 사용합니다반복 가능한 읽기격리 수준. 이 선택을 통해 쿼리가 수행되는 경우 원격 서버에서 여러 테이블을 스캔하면 모든 스캔에 대해 스냅샷과 일관된 결과를 제공합니다. 결과는 다음과 같습니다 단일 트랜잭션 내의 연속적인 쿼리는 동시 업데이트가 있더라도 원격 서버의 동일한 데이터 다른 활동으로 인해 원격 서버에서 발생합니다. 그 로컬 트랜잭션이 다음을 사용하는 경우 어쨌든 동작이 예상됩니다.연재 가능또는반복 가능한 읽기격리 수준이지만 격리 수준일 수도 있습니다. 놀랍습니다읽어 커밋됨지역 거래. 미래PostgreSQL릴리스에서는 이 규칙을 수정할 수 있습니다.
postgres_fdw최적화 시도 전송되는 데이터의 양을 줄이기 위한 원격 쿼리 외국 서버. 이는 쿼리를 전송하여 수행됩니다.어디실행을 위해 원격 서버에 대한 절, 그리고 필요하지 않은 테이블 열을 검색하지 않음으로써 현재 쿼리. 쿼리가 잘못 실행될 위험을 줄이기 위해,어디절은 원격으로 전송되지 않습니다 내장된 데이터 유형, 연산자 및 기능. 절의 연산자와 함수는 다음과 같아야 합니다.불변또한.
실제로 원격 서버로 전송되는 쿼리는 실행은 다음을 사용하여 검사할 수 있습니다.설명하세요 장황한.
다음에 의해 열린 원격 세션에서postgres_fdw, 그검색_경로매개변수가 다음으로 설정되었습니다.pg_catalog그러니까 스키마 없이는 내장 객체만 볼 수 있습니다. 자격. 이는 다음으로 생성된 쿼리에는 문제가 되지 않습니다.postgres_fdw그 자체입니다. 왜냐하면 항상 그러한 자격을 제공합니다. 그러나 이는 다음과 같은 위험을 초래할 수 있습니다. 트리거를 통해 원격 서버에서 실행되는 기능 또는 원격 테이블에 대한 규칙. 예를 들어 원격 테이블이 실제로 뷰에서 사용되는 모든 기능은 제한된 검색 경로. 모두 스키마 한정을 수행하는 것이 좋습니다. 해당 함수에 이름을 지정하거나 첨부하세요.SET 검색_경로옵션(참조함수 생성)을 이러한 기능에 추가 예상 검색 경로 환경을 설정합니다.
postgres_fdw마찬가지로 매개변수에 대한 롤 토토 세션 설정시간대, 날짜 스타일, 간격 스타일, 그리고extra_float_digits. 이는 다음보다 문제가 될 가능성이 적습니다.검색_경로, 그러나 함수로 처리 가능SET필요한 경우 옵션을 선택하세요.
그렇습니다아님권장됨 세션 수준을 변경하여 이 동작을 재정의합니다. 이러한 매개변수의 설정; 그로 인해 발생할 가능성이 높습니다.postgres_fdw오작동합니다.
postgres_fdw리모컨과 함께 사용할 수 있습니다. 서버 날짜는 다음과 같습니다.PostgreSQL8.3. 읽기 전용 기능은 8.1부터 사용할 수 있습니다. 제한사항 그런데 그게 말이야postgres_fdw일반적으로 불변 내장 함수와 연산자가 안전하다고 가정합니다. a에 나타나는 경우 실행을 위해 원격 서버로 보냅니다.어디외부 테이블에 대한 절입니다. 따라서, 롤 토토 서버 출시 이후 추가된 내장 기능 실행을 위해 전송될 수 있으며 결과적으로"함수가 존재하지 않습니다"또는 유사한 오류. 이 오류 유형은 쿼리를 다시 작성하여 해결할 수 있습니다. 예를 들어 외부 테이블 참조를 하위-선택함께오프셋 0최적화 울타리로 사용하고 문제가 있는 sub- 외부의 함수 또는 연산자선택.
하나다 시게루<shigeru.hanada@gmail.com