롤 토토 : 문서 : 9.5 : 롤 토토 | |||
---|---|---|---|
이전 | up | 부록 F. 추가 공급 모듈 | 다음 |
the토토 꽁 머니모듈은 외국 데이터 래퍼를 제공합니다토토 꽁 머니, 외부에 저장된 데이터에 액세스하는 데 사용할 수 있습니다PostgreSQL서버.
이 모듈에서 제공하는 기능은 이전의 기능과 실질적으로 겹칩니다dblink모듈. 하지만토토 꽁 머니원격 테이블에 액세스하기위한보다 투명하고 표준 준수 구문을 제공하며 많은 경우 더 나은 성능을 제공 할 수 있습니다.
원격 액세스 준비토토 꽁 머니:
설치토토 꽁 머니확장 사용확장 생성.
사용을 사용하여 외국 서버 개체 생성PostgreSQL : 문서 : 9.5 : 롤 토토 생성, 연결하려는 각 원격 데이터베이스를 나타냅니다. 을 제외하고 연결 정보 지정사용자및비밀번호, 서버 객체의 옵션으로
사용 사용자 매핑 생성사용자 매핑 만들기, 각 데이터베이스 사용자에 대해 각 외국 서버에 액세스 할 수 있습니다. as as 원격 사용자 이름과 비밀번호를 지정하십시오.사용자및비밀번호사용자 매핑 옵션.
사용 외국 테이블 만들기외국 테이블 만들기또는PostgreSQL :, 액세스하려는 각 원격 테이블에 대해. 외국 테이블의 열은 참조 된 원격 테이블과 일치해야합니다.
이제 필요select기본 원격 테이블에 저장된 데이터에 액세스하기 위해 외국 테이블에서. 를 사용하여 원격 테이블을 수정할 수도 있습니다.삽입, 업데이트또는삭제. (물론, 사용자 매핑에 지정된 원격 사용자는 이러한 작업을 수행 할 권한이 있어야합니다.)
참고토토 꽁 머니현재 지원 부족삽입충돌시 업데이트절. 그러나충돌에 대한 일이 없습니다조항이 지원되며 고유 한 지수 추론 사양이 생략된다면
일반적으로 외국 테이블의 열은 원격 테이블의 참조 된 열과 정확히 동일한 데이터 유형으로 선언되고 해당되는 경우 콜라주를 표시하는 것이 좋습니다. 하지만토토 꽁 머니현재 필요에 따라 데이터 유형 변환 수행에 대해 다소 용서하고 있습니다. 원격 서버 해석으로 인해 유형이나 콜라주가 일치하지 않을 때 놀라운 의미 론적 이상이 발생할 수 있습니다여기서로컬 서버와 약간 다르게 조항.
기본 원격 테이블이 가지고있는 것보다 열이 적거나 열 순서가 다른 외부 테이블을 선언 할 수 있습니다. 원격 테이블에 열을 일치시키는 것은 이름이 아닌 위치입니다.
토토 꽁 머니외국 데이터 래퍼는와 동일한 옵션을 가질 수 있습니다.libpq연결 문자열에서 수락합니다.섹션 31.1.2,이 옵션이 허용되지 않는 경우를 제외하고 :
사용자및비밀번호(대신 사용자 맵핑에 이들을 지정)
client_encoding(로컬 서버 인코딩에서 자동으로 설정 됨)
fallback_application_name(항상 설정토토 꽁 머니)
슈퍼 사용자 만 암호 인증없이 외국 서버에 연결할 수 있으므로 항상를 지정하십시오.비밀번호비 슈퍼 사용자에 속하는 사용자 매핑 옵션.
이 옵션은 원격으로 전송 된 SQL 문에 사용 된 이름을 제어하는 데 사용될 수 있습니다PostgreSQL서버. 이 옵션은 기본 원격 테이블의 이름과 다른 이름으로 외국 테이블을 만들 때 필요합니다.
외국 테이블에 지정할 수있는이 옵션은 원격 서버의 외부 테이블에 사용할 스키마 이름을 제공합니다. 이 옵션이 생략되면 외국 테이블 스키마의 이름이 사용됩니다.
외국 테이블에 지정할 수있는이 옵션은 원격 서버의 외부 테이블에 사용할 테이블 이름을 제공합니다. 이 옵션이 생략되면 외국 테이블 이름이 사용됩니다.
이 옵션은 외국 테이블 열에 지정할 수있는이 옵션은 원격 서버의 열에 사용할 열 이름을 제공합니다. 이 옵션이 생략되면 열 이름이 사용됩니다.
토토 꽁 머니원격 서버에 대한 쿼리를 실행하여 원격 데이터를 검색하므로 외국 테이블을 스캔하는 데 드는 예상 비용은 원격 서버에서 수행하는 비용과 통신을위한 오버 헤드 여야합니다. 이러한 추정치를 얻는 가장 신뢰할 수있는 방법은 원격 서버를 요청한 다음 오버 헤드를 추가하는 것입니다. 그러나 간단한 쿼리의 경우 비용 추정치를 얻기 위해 추가 원격 쿼리 비용의 가치가 없습니다.토토 꽁 머니비용 추정 방법을 제어하기위한 다음 옵션을 제공합니다.
이 옵션은 외국 테이블 또는 외국 서버에 지정할 수있는이 옵션이를 제어합니다.토토 꽁 머니원격 문제설명비용 추정치를 얻기위한 명령. 외국 테이블의 설정은 서버의 모든 설정을 대체하지만 해당 테이블에만 해당됩니다.거짓.
외국 서버에 지정할 수있는이 옵션은 해당 서버의 모든 외국 테이블 스캔의 예상 시작 비용에 추가되는 숫자 값입니다. 이는 원격 측면의 연결, 구문 분석 및 계획 등의 추가 오버 헤드를 나타냅니다. 기본값은입니다.100.
외국 서버에 지정할 수있는이 옵션은 해당 서버의 외국 테이블 스캔을위한 추가 비용 당 추가 비용으로 사용되는 숫자 값입니다. 이는 서버 간의 데이터 전송의 추가 오버 헤드를 나타냅니다.0.01.
언제use_remote_estimatetrue,토토 꽁 머니원격 서버에서 행 카운트 및 비용 추정치를 얻은 다음 추가fdw_startup_cost및fdw_tuple_cost비용 추정치. 언제use_remote_estimatefalse,토토 꽁 머니로컬 행 카운트 및 비용 추정을 수행 한 다음 추가fdw_startup_cost및fdw_tuple_cost비용 추정치. 원격 테이블 통계의 로컬 사본을 사용할 수 없다면이 로컬 추정은 매우 정확하지 않을 것입니다.분석외국 표에서 로컬 통계를 업데이트하는 방법입니다. 이것은 원격 테이블의 스캔을 수행 한 다음 테이블이 로컬 인 것처럼 통계를 계산하고 저장합니다.
기본적으로 모든 외국 테이블을 사용하여토토 꽁 머니는 업데이트 가능한 것으로 가정합니다. 다음 옵션을 사용하여 재정의 할 수 있습니다.
이 옵션은를 제어합니다.토토 꽁 머니삽입, 업데이트및삭제명령. 외국 테이블 또는 외국 서버에 대해 지정할 수 있습니다.true.
물론 원격 테이블이 실제로 업데이트되지 않으면 어쨌든 오류가 발생합니다. 이 옵션을 사용하면 주로 원격 서버를 쿼리하지 않고 오류를 로컬로 던질 수 있습니다.Information_Schema보기가 a를보고합니다.토토 꽁 머니원격 서버를 점검하지 않고이 옵션의 설정에 따라 외국 테이블을 업데이트 할 수 있습니다.
토토 꽁 머니를 사용하여 외래 테이블 정의를 가져올 수 있습니다PostgreSQL :. 이 명령은 로컬 서버에서 원격 서버에있는 테이블 또는보기와 일치하는 외국 테이블 정의를 만듭니다.
동작 가져 오기는 다음 옵션으로 사용자 정의 할 수 있습니다 (외국 스키마 가져 오기명령) :
이 옵션은 열 여부를 제어합니다Collate옵션은 외국 서버에서 가져온 외국 테이블의 정의에 포함됩니다. 기본값은true. 원격 서버가 로컬 서버와 다른 Collation 이름 세트가 있으면이를 끄는 것이 필요할 수 있습니다. 이는 다른 운영 체제에서 실행중인 경우에 해당 될 것입니다.
이 옵션은 열 여부를 제어합니다기본값표현식은 외국 서버에서 가져온 외국 테이블의 정의에 포함됩니다. 기본값은거짓. 이 옵션을 활성화하는 경우 원격 서버에서 로컬 서버에서 다르게 계산 될 수있는 기본값에주의하십시오.nextVal ()
는 일반적인 문제의 원인입니다. 그만큼가져 오기가져 오기 기본 표현식이 로컬로 존재하지 않는 함수 또는 연산자를 사용하는 경우 완전히 실패합니다.
이 옵션은 열 여부를 제어합니다NOT NULL제약 조건은 외국 서버에서 가져온 외국 테이블의 정의에 포함됩니다. 기본값은true.
이외의 제약 조건에 유의하십시오.NOT NULL원격 테이블에서 가져 오지 않습니다. 하지만PostgreSQL지원check외국 테이블의 제약 조건은 제약 조건 표현이 로컬 서버 및 원격 서버에서 다르게 평가할 수 있기 때문에 자동으로 가져 오는 조항이 없습니다. a의 행동에 대한 그러한 불일치check제약 조건은 쿼리 최적화에서 감지하기 어려운 오류로 이어질 수 있습니다. 수입하고 싶다면check제약 조건, 수동으로 수행해야하며 각각의 의미를 신중하게 확인해야합니다. 치료에 대한 자세한 내용은check외국 테이블의 제약 조건, 참조외국 테이블 만들기.
토토 꽁 머니외국 서버와 관련된 외국 테이블을 사용하는 첫 번째 쿼리 중에 외국 서버에 대한 연결을 설정합니다. 이 연결은 동일한 세션에서 후속 쿼리에 대해 유지 및 재사용됩니다.
외국 서버에서 원격 테이블을 참조하는 쿼리 중에토토 꽁 머니현재 로컬 트랜잭션에 해당하는 것을 아직 열지 않은 경우 원격 서버에서 트랜잭션을 엽니 다. 로컬 거래가 저지르거나 중단 할 때 원격 거래는 커밋되거나 중단됩니다.
원격 트랜잭션이 사용SERIALIZALE지역 거래가있는 경우 격리 수준SERIALIZALE분리 레벨; 그렇지 않으면 사용반복 가능한 읽기격리 레벨. 이 선택을 통해 쿼리가 원격 서버에서 여러 테이블 스캔을 수행하면 모든 스캔에 대한 스냅 샷과 일치하는 결과가 나타납니다.SERIALIZALE또는반복 가능한 읽기격리 수준이지만 A에 놀라운 일이 될 수 있습니다.Committed로컬 거래. 미래PostgreSQL릴리스이 규칙을 수정할 수 있습니다.
현재는 지원되지 않습니다토토 꽁 머니2 상 커밋을위한 원격 트랜잭션을 준비하려면
토토 꽁 머니외국 서버에서 전송 된 데이터 양을 줄이기 위해 원격 쿼리를 최적화하려고 시도합니다. 이것은 query를 보내어 수행됩니다여기서실행을 위해 원격 서버로의 조항과 현재 쿼리에 필요하지 않은 테이블 열을 검색하지 않습니다. 쿼리의 미성 침체의 위험을 줄이기 위해여기서조항은 내장 데이터 유형, 운영자 및 기능 만 사용하지 않는 한 원격 서버로 전송되지 않습니다. 조항의 운영자 및 기능은이어야합니다.불변
실행을 위해 실제로 원격 서버로 전송 된 쿼리를 사용하여 검사 할 수 있습니다Verbose 설명.
토토 꽁 머니, Thesearch_path매개 변수는 Just로 설정되었습니다PG_CATALOG, 스키마 자격없이 내장 된 오브젝트 만 표시됩니다. 이것은에 의해 생성 된 쿼리에 대한 문제가 아닙니다.토토 꽁 머니자체는 항상 그러한 자격을 공급하기 때문입니다. 그러나 이는 원격 테이블의 트리거 또는 규칙을 통해 원격 서버에서 실행되는 기능에 위험을 초래할 수 있습니다.set search_path옵션 (참조함수 만들기) 그러한 함수에 대한 예상 검색 경로 환경을 설정하기 위해.
토토 꽁 머니마찬가지로 매개 변수에 대한 원격 세션 설정을 설정합니다TimeZone, Datestyle, IntervalStyle및extra_float_digits. 이것들은보다 문제가 적을 가능성이 적습니다search_path, 그러나 함수로 처리 할 수 있습니다SET필요가 발생하는 경우 옵션.
그것은not이 매개 변수의 세션 수준 설정을 변경 하여이 동작을 무시할 것을 권장합니다. 그것은 원인 일 가능성이 높습니다토토 꽁 머니오작동에.
토토 꽁 머니로 돌아가는 원격 서버와 함께 사용할 수 있습니다PostgreSQL8.3. 읽기 전용 기능은 8.1로 다시 사용할 수 있습니다.토토 꽁 머니일반적으로 불변의 내장 기능과 운영자가 실행을 위해 원격 서버로 보내기에 안전하다고 가정합니다.여기서외국 표에 대한 조항. 따라서 원격 서버의 릴리스 이후에 추가 된 내장 기능이 실행을 위해 전송 될 수있어"함수는 존재하지 않습니다"또는 유사한 오류. 이 유형의 실패는 쿼리를 다시 작성하여 해결할 수 있습니다.selectwith오프셋 0최적화 울타리로서, 문제가있는 기능이나 연산자를 하위 외부에 배치합니다select.
여기에 외국 테이블을 만드는 예는입니다.토토 꽁 머니. 먼저 확장자 설치 :
Extension Create 토토 꽁 머니;
그런 다음를 사용하여 외래 서버를 만듭니다.PostgreSQL : 문서 : 9.5 : 롤 토토 생성. 이 예에서 우리는 A에 연결하고 싶습니다PostgreSQL호스트의 서버192.83.123.89포트 듣기5432. 연결이 이루어진 데이터베이스 이름외국_DB원격 서버에서 :
Server forever_server 생성 외국 데이터 포장 토토 꽁 머니
사용자 맵핑,사용자 매핑 만들기, 원격 서버에서 사용될 역할을 식별하기 위해 필요합니다 :
local_user에 대한 사용자 매핑 생성 서버 외국_server
이제로 외국 테이블을 만들 수 있습니다외국 테이블 만들기. 이 예에서는이라는 테이블에 액세스하고자합니다.some_schema.some_table원격 서버에서. 그것의 로컬 이름은입니다.외국 _table:
외국 _table 생성 ( ID 정수가 NULL,
선언 된 열의 데이터 유형 및 기타 속성이외국 테이블 만들기실제 원격 테이블과 일치합니다. 첨부하지 않는 한 열 이름도 일치해야합니다column_name원격 테이블에서 이름이 어떻게 지명되었는지를 보여주기 위해 개별 열의 옵션. 많은 경우 사용PostgreSQL :수동으로 외국 테이블 정의를 구성하는 것이 바람직합니다.
Shigeru Hanada<shigeru.hanada@gmail.com
이전 | 롤 토토 : 문서 : 9.5 : 롤 토토 9.5.25 문서화 | 다음 |
PG_TRGM | up | SEG |