복사 [BANIAR]테이블[OIDS와 함께] 에서 'filename' |Stdin[Delimiters 사용Delimiter' ]] 복사 [binary]테이블[OIDS와 함께] 에게 'filename' |stdout[Delimiters 사용Delimiter' ]
필드 형식의 동작을 변경하여 모든 것을 강요합니다 데이터가 아닌 이진 객체로 저장하거나 읽을 데이터 텍스트.
기존 테이블의 이름.
각각의 내부 고유 개체 ID (OID)를 복사합니다 열.
입력 또는 출력의 절대 유닉스 경로 이름 파일.
입력이 파이프 또는 터미널에서 나온 것을 지정합니다.
출력이 파이프 또는 터미널로 이동하는 것을 지정합니다.
입력 또는 출력을 구분하는 문자 전지.
사본이 성공적으로 완료되었습니다.
오류에 명시된 이유로 사본이 실패했습니다. 메시지.
COPY간에 데이터 이동Postgres테이블 및 표준 유닉스 파일.
COPY지시PostgresOR에서 직접 읽기위한 백엔드 파일에 씁니다. 파일은 백엔드에 직접 표시되어야합니다 그리고 이름은 백엔드의 관점에서 지정되어야합니다. 만약에Stdin또는stdout지정되고 데이터가 지정되어 있습니다 백엔드에 클라이언트 프론트 엔드.
바이너리 키워드는 모든 데이터를 저장/읽습니다. 텍스트가 아닌 이진 객체. 그것은 다소 빠릅니다 정상 복사 명령은 일반적으로 휴대용이 아니며 이 요소는 생성 된 윈 토토이 다소 큽니다 데이터 자체에 크게 의존합니다. 기본적으로 텍스트 사본 탭 ( "\ t") 문자를 구분기로 사용합니다. 구분 기는 할 수 있습니다 키워드로 다른 단일 문자로 변경됩니다. 구분자를 사용한 문구. 데이터 필드의 문자 구분자 문자와 일치하려면 인용됩니다.
값이있는 모든 테이블에서 선택 액세스가 있어야합니다. 읽기COPY, 삽입 또는 값이 삽입되는 테이블에 대한 액세스 업데이트 에 의해copy. 백엔드도 필요합니다 읽거나 쓴 윈 토토에 대한 적절한 unix 권한COPY.
Delimiters를 사용한 키워드 문구는 단일을 지정합니다 열 사이의 모든 구분 제에 사용되는 문자. 만약에 여러 문자가 구분자 문자열에만 지정됩니다 첫 번째 문자가 사용됩니다.
팁 :혼동하지 마십시오COPYwithPSQL교육\ copy.
언제복사이진 옵션, 생성 된 파일에는 각 행 (인스턴스)이 있습니다. 각 열 (속성)이 구분자 문자. 내장 된 구분자 문자가 될 것입니다 백 슬래시 문자 ( "\")가 앞서 있습니다. 속성 값 자체는 출력 기능에 의해 생성 된 문자열입니다 각 속성 유형과 관련이 있습니다. a의 출력 함수 유형은 백 슬래시 문자를 생성하지 않아야합니다. 이것 처리됩니다.copy자체.
각 인스턴스의 실제 형식은입니다.
<Att1 <분리기 <아트 2 <분리기 ... <분리기 <아트n <newlineOID가있는 경우 OID가 선의 시작 부분에 배치됩니다. 지정됩니다.
ifcopy출력을 전송합니다 파일 대신 표준 출력이 BackSlash ( "\") 및 기간 ( ".") 다음 즉시 a Newline, 별도의 줄에, 완료되면. 마찬가지로copy표준 입력에서 읽고 있습니다 백 슬래시 ( "\")와 기간 ( ".")과 Newline, 라인의 첫 세 문자로서 파일 끝. 하지만,copy의지 진정한 eof가 인 경우 종료 (백엔드 자체 뒤에) 이 특수 파일 패턴 이전에 발생합니다 설립하다.
Backslash 캐릭터에는 다른 특별한 의미가 있습니다. 널 속성은 "\ n"으로 출력됩니다. 문자 그대로의 백 슬래시 캐릭터는입니다 두 개의 연속 백 슬래시 ( "\\")로 출력. 문자 그대로 탭 문자는 백 슬래시와 탭으로 표시됩니다. 문자 그대로 Newline 캐릭터는 백 슬래시와 Newline으로 표시됩니다. 텍스트 데이터를로드 할 때Postgres, 백 슬래시를 변환해야합니다 이를 보장하기 위해 문자 ( "\")에서 이중 백 슬래시 ( "\\") 그들은 제대로로드됩니다.
의 경우BINAGE COPY, 첫 번째 윈 토토의 4 바이트는 인스턴스 수입니다. 윈 토토. 이 숫자가 0이면복사 이진윈 토토 끝이 발생할 때까지 명령이 읽습니다. 그렇지 않으면이 인스턴스가 발생하면 읽기가 중단됩니다. 읽었습니다. 윈 토토의 나머지 데이터는 무시됩니다.
파일의 각 인스턴스의 형식은 다음과 같습니다. 메모 이 형식을 따라야한다정확히. 서명되지 않은 4 바이트 정수 수량 아래 표에서 UINT32라고합니다.
표 19-1. 이진 사본 윈 토토의 내용
시작시 윈 토토의 | |
UINT32 | 튜플 수 |
각각 튜플 | |
UINT32 | 튜플의 총 길이 데이터 |
UINT32 | OID (지정된 경우) |
UINT32 | 널 수 속성 |
[uint32, ..., uint32] | 속성 번호 속성, 0 계산 |
- | <tuple data |
SUN-3S에서는 2 바이트 속성이 2 바이트에 정렬됩니다 경계 및 모든 더 큰 속성은 4 바이트에 정렬됩니다 경계. 문자 속성은 단일 바이트에서 정렬됩니다 경계. 대부분의 다른 기계에서 모든 속성은보다 큰 속성입니다 1 바이트는 4 바이트 경계에서 정렬됩니다. 변수에 유의하십시오 길이 속성은 속성의 길이가 앞에 있습니다. 배열은 단순히 배열 요소의 연속 스트림입니다 유형.
다음 예제는 표준 출력으로 테이블을 복사합니다. 필드 구분 기자로서 수직 막대 ( "|") :
국가 복사StdoutDelimiters 사용 | ';
UNIX 파일에서 데이터를 테이블 "Country"로 복사하려면 :
'/usr1/proj/bray/sql/country_data'에서 컨트리를 복사합니다.
테이블에 복사하는 데 적합한 데이터 샘플이 있습니다. 에서Stdin(따라서 종료가 있습니다 마지막 줄의 시퀀스) :
AF 아프가니스탄 알 알바니아 DZ 알제리 ... ZM 잠비아 ZW 짐바브웨 \.
동일한 데이터, Linux/i586의 이진 형식의 출력 기계. UNIX를 통해 필터링 한 후 데이터가 표시됩니다 공익사업OD -C. 테이블에는 세 개의 필드가 있습니다. 첫 번째는char (2)그리고 두 번째는텍스트. 모든 행에는 널 값이 있습니다 세 번째 필드에서. 어떻게char (2)필드에는 널이 4 바이트로 채워져 있습니다 텍스트 필드는 길이가 앞서 있습니다.
355 \ 0 \ 0 \ 0 027 \ 0 \ 0 \ 0 001 \ 0 \ 0 \ 0 002 \ 0 \ 0 \ 0 006 \ 0 \ 0 \ 0 A F \ 0 \ 0 017 \ 0 \ 0 \ 0 A F G H A N I S T A N 023 \ 0 \ 0 \ 0 001 \ 0 \ 0 \ 0 002 \ 0 \ 0 \ 0 006 \ 0 \ 0 \ 0 a l \ 0 \ 0 \ V \ 0 \ 0 \ 0 a L B A N I A 023 \ 0 \ 0 \ 0 001 \ 0 \ 0 \ 0 002 \ 0 \ 0 \ 0 006 \ 0 \ 0 \ 0 \ 0 D Z \ 0 \ 0 \ V \ 0 \ 0 \ 0 a l g e r i a ... \ n \ 0 \ 0 \ 0 Z A M B I A 024 \ 0 \ 0 \ 0 001 \ 0 \ 0 \ 0 002 \ 0 \ 0 \ 0 006 \ 0 \ 0 \ 0 Z W \ 0 \ 0 \ f \ 0 \ 0 \ 0 Z I M B A B W E
COPY첫 번째 작업을 중지합니다 오류. 이것은 A의 경우 문제를 일으키지 않아야합니다.COPY From그러나 대상 관계는 물론, 부분적으로 A를 수정하십시오.복사 에게. 그만큼진공쿼리를 사용해야합니다 실패한 후 정리하십시오.
Postgres 백엔드의 현재 작업 디렉토리이기 때문에 일반적으로 사용자의 작업 디렉토리와 같지 않으면 결과가 " 파일에 복사foo"(없음 추가 경로 정보)는 예상치 못한 결과를 얻을 수 있습니다 순진한 사용자. 이 경우fooWill Wind UP in$ pgdata/foo. 일반적으로 전체 백엔드 서버 컴퓨터에 나타나는 PathName 복사 할 파일을 지정할 때 사용하십시오.
인수로 사용되는 윈 토토COPY필수 데이터베이스 서버 시스템에 오르거나 액세스 할 수 있습니다. 로컬 디스크 또는 네트워크 파일 시스템에 있습니다.
한 컴퓨터에서 다른 기계로 TCP/IP 연결을 사용하는 경우 대상 윈 토토이 지정되고 대상 윈 토토이 기록됩니다. 백엔드가 작동하는 기계에서 사용자 기계.
없음COPY진술 SQL92.