복사 [BANIAR]테이블[OIDS와 함께] 에서 'filename' |Stdin[[사용] Delimiters 'Delimiter' ]] [NULL으로 'null String' ]] 복사 [binary]테이블[OIDS와 함께] 에게 'filename' |stdout[[사용] Delimiters 'Delimiter' ]] [NULL으로 'null String' ]
필드 형식의 동작을 변경하여 모든 것을 강요합니다 데이터가 아닌 이진 형식으로 저장하거나 읽을 데이터 텍스트. 구분자와 널 옵션이있는 것은 관련이 없습니다 이진 형식의 경우
기존 테이블의 이름.
내부 고유 객체 ID (OID) 복사를 지정합니다. 각 행에 대해.
입력 또는 출력의 절대 유닉스 경로 이름 파일.
입력이 클라이언트에서 제공되는 것을 지정합니다 애플리케이션.
출력이 클라이언트로 이동하는 것을 지정합니다 애플리케이션.
각 행 내 필드를 분리하는 문자 토토 사이트의 (줄).
널 값을 나타내는 문자열. 기본값 이다"\ n"(backslash-n). 당신은 선호 할 수 있습니다 예를 들어 빈 문자열.
참고 :사본에 데이터 항목이 있습니다 일치하는이 문자열은 널 값으로 저장됩니다. 따라서 동일한 문자열을 사용해야합니다. 복사에 사용했던대로.
COPY간에 데이터 이동Postgres표 및 표준 토토 사이트 시스템 토토 사이트.복사전체 내용을 복사합니다 파일에 테이블의COPY From파일에서 테이블로 데이터를 복사합니다 (데이터가 추가 이미 테이블에 무엇이든지).
COPY지시PostgresOR에서 직접 읽는 백엔드 파일에 씁니다. 파일 이름이 지정된 경우 파일은 백엔드에 액세스 할 수 있으며 이름은 백엔드의 관점. 만약에Stdin또는stdout지정되어 데이터가 흐릅니다 백엔드에 클라이언트 프론트 엔드.
팁 :혼동하지 마십시오COPYwithPSQL교육\ copy. \ copy호출stdin에서 복사또는stdout에 복사그리고 다음을 가져 오거나 저장합니다 에 액세스 할 수있는 파일의 데이터PSQL클라이언트. 따라서 토토 사이트 접근성 접근 권한은 백엔드시기\ copy사용됩니다.
이진 키워드는 모든 데이터를 저장/읽을 수 있도록 강요합니다. 텍스트가 아닌 이진 형식. 그것은 다소 빠릅니다 일반 복사 명령이지만 이진 사본 파일은 휴대용이 아닙니다. 기계 아키텍처를 가로 질러.
기본적으로 텍스트 사본은 탭 ( "\ t") 문자를 필드 사이의 구분 기. 필드 구분 기호가 변경 될 수 있습니다 키워드 문구가있는 다른 단일 문자 구분자. 데이터 필드의 문자 Delimiter 캐릭터는 Backslash가 인용됩니다. 주목하십시오 구분 기는 항상 단일 캐릭터입니다. 여러 문자 인 경우 Delimiter String에 지정되어 있으며 첫 번째 문자 만 사용됩니다.
당신은 있어야합니다액세스 선택값을 읽는 테이블COPY및 어느 하나삽입또는업데이트 액세스값이있는 테이블에 삽입COPY. 백엔드도 읽거나 쓰여진 토토 사이트에 대해 적절한 Unix 권한이 필요합니다. 에 의해copy.
복사규칙을 호출하지도 않습니다 열 기본값에 따라 행동합니다. 트리거를 호출하고 확인합니다 제약 조건.
copy첫 번째 작업을 중지합니다 오류. 이것은 A의 경우 문제를 일으키지 않아야합니다.복사, 그러나 대상 관계는 이미 A에서 이전 행을 받았습니다복사 에게. 이 행은 보이거나 접근 할 수 없지만 여전히 디스크 공간을 차지합니다. 이것은 상당한 금액 일 수 있습니다 실패가 잘 발생하면 낭비되는 디스크 공간의 양 큰 사본 작동. 당신은 호출하고 싶을 수도 있습니다진공낭비 된 공간을 복구하려면
a 토토 사이트COPY명령은입니다 클라이언트가 아닌 백엔드에 의해 직접 읽거나 작성 애플리케이션. 그러므로 그들은 상주하거나 접근 할 수 있어야합니다 클라이언트가 아닌 데이터베이스 서버 시스템. 그들은해야합니다 Postgres 사용자가 액세스 할 수 있고 읽을 수 있거나 쓸 수 있습니다. (userid the backend는 클라이언트가 아닌 다음으로 실행됩니다.COPY파일 이름 지정은 데이터베이스에만 허용됩니다 슈퍼 사용자는 백엔드에는 쓸 수있는 특권이 있습니다.
팁 :thePSQL교육\ copy읽기 또는 쓰기 클라이언트의 권한이있는 클라이언트 시스템의 파일 따라서 슈퍼 유행자에게는 제한되지 않습니다.
에 사용 된 파일 이름이 권장됩니다COPY항상 절대 경로로 지정됩니다. 이것은의 경우 백엔드에 의해 시행됩니다.복사하지만COPY From당신은 상대 경로. 경로는 백엔드의 작업 디렉토리 (아래 어딘가$ pgdata), 클라이언트의 작업이 아닙니다 예배 규칙서.
언제복사이진 옵션, 생성 된 파일에는 각 행 (인스턴스)이 있습니다. 각 열 (속성)이 구분자 문자. 내장 된 구분자 문자가 될 것입니다 백 슬래시 문자 ( "\")가 앞서 있습니다. 속성 값 자체는 출력 기능에 의해 생성 된 문자열입니다 각 속성 유형과 관련이 있습니다. a의 출력 함수 유형은 백 슬래시 문자를 생성하지 않아야합니다. 이것 처리됩니다.copy자체.
각 인스턴스의 실제 형식은입니다.
<Att1 <분리기 <artt2 <분리기 ... <분리기 <아트n <newline각 행의 끝은 유닉스 스타일로 표시됩니다. Newline ( "\ n").COPYDOS- 또는 MAC 스타일의 Newlines가 포함 된 파일이 주어지면 원하는 경우.
OID가있는 경우 OID가 첫 번째 열로 방출됩니다. 지정.
if복사출력을 전송합니다 파일 대신 표준 출력, 마지막 행 후에는 백 슬래시 ( "\")와 기간 ( ".")을 보내고 Newline. 마찬가지로COPY FROMis 표준 입력에서 읽으면 Backslash ( "\")가 기대됩니다. 그리고 처음 세와 같은 기간 ( ".")과 Newline이 뒤 따릅니다. 파일 끝을 나타내는 라인의 문자. 하지만,복사올바르게 종료됩니다 (이어집니다 백엔드 자체) 입력 연결이 전에 닫힌 경우 이 특별한 파일 끝 패턴이 발견됩니다.
Backslash 캐릭터에는 다른 특별한 의미가 있습니다. 에이 문자 그대로의 백 슬래시 문자는 두 개의 연속으로 표시됩니다 백 슬래시 ( "\\"). 문자 그대로의 탭 문자는 a로 표시됩니다 백 슬래시와 탭. (탭 이외의 것을 사용하는 경우 열 구분자로서, 문자를 구분하는 백 슬래시 데이터에 포함하십시오.) 문자 그대로의 Newline 캐릭터가 표시됩니다. 백 슬래시와 새로운 라인으로. 텍스트 데이터를로드 할 때 생성Postgres, 당신은 할 것입니다 백 슬래시 문자 ( "\")를 변환해야합니다 이중 백 슬래시 ( "\\")가로드되도록합니다 제대로.
에 사용 된 토토 사이트 형식BINAGE COPYPostgres v7.1에서 변경되었습니다. 새 형식은 파일로 구성됩니다 헤더, 0 이상의 튜플 및 토토 사이트 트레일러.
토토 사이트 헤더는 24 바이트의 고정 필드로 구성됩니다. 가변 길이 헤더 확장 영역이 뒤 따릅니다. 그만큼 고정 된 필드는 다음과 같습니다.
12-byte 시퀀스 "Pgbcopy \ n \ 377 \ r \ n \ 0"--- 널은 서명의 필수 부분입니다. (그만큼 서명은 쉽게 식별 할 수 있도록 설계되었습니다 8 비트 클리어에 의해 결정된 파일 옮기다. 이 서명은 변경됩니다 Newline-Translation Filters, Nulls를 떨어 뜨리고 떨어졌습니다 높은 비트 또는 패리티 변경.)
int32 소스의 바이트 순서에서 상수 0x01020304. 잠재적으로 독자는 바이트 플라이핑에 참여할 수 있습니다 후속 필드 잘못된 바이트 순서가 감지 된 경우 여기.
int32 비트 마스크의 중요한 측면을 나타냅니다 토토 사이트 형식. 비트는 0 (LSB)에서 31 (MSB)에서 번호가 매겨집니다. ---이 필드는 소스와 함께 저장됩니다 모든 이후의 정수 필드와 마찬가지로 엔디 니스. 비트 16-31은 임계 토토 사이트 형식을 표시하도록 예약되어 있습니다 문제; 독자가 예상치 못한 것을 발견하면 중단해야합니다 이 범위에서 비트 설정. 비트 0-15는 신호로 예약되어 있습니다 후진 호환 형식 문제; 독자가해야합니다 이 범위에 설정된 예기치 않은 비트를 무시하십시오. 현재 하나의 플래그 비트 만 정의되고 나머지는 0이어야합니다 :
1 인 경우 OID가 덤프에 포함됩니다. 0, 아니다
int32 나머지 헤더의 바이트의 길이는 아닙니다 자기 포함. 초기 버전에서는 이것이 될 것입니다 0, 첫 번째 튜플은 즉시 따릅니다. 미래 형식으로 변경하면 추가 데이터가 헤더에 존재합니다. 독자는 조용히 건너 뛰어야합니다 모든 헤더 확장 데이터를 통해 무엇을 .
헤더 확장 영역은 a를 포함하도록 구상되었습니다 자기 식별 청크 순서. 플래그 필드는 아닙니다 독자들에게 확장 영역에 무엇이 있는지 알리기위한 것입니다. 헤더 확장 내용의 특정 설계는 나중에 릴리스.
이 디자인은 뒤로 호환 헤더를 모두 허용합니다 추가 (헤더 확장 청크 추가 또는 저음 플래그를 설정하십시오 비트) 및 비 백워드 호환 변경 (고차 설정 이러한 변경 사항을 알리기 위해 비트를 플래그하고 지원 데이터를 추가합니다. 필요한 경우 확장 영역).
각 튜플은 int16 수로 시작됩니다. 튜플의 들판. (현재, 테이블에있는 모든 튜플이 있습니다 똑같은 수를 가지고 있지만 항상 사실이 아닐 수도 있습니다.) 그런 다음 튜플의 각 필드마다 반복되면 Int16이 있습니다. typlen 단어에 이어 필드 데이터가 이어질 수 있습니다. Typlen 필드 따라서 해석됩니다 :
필드는 null입니다. 데이터는 따르는 데 없습니다.
필드는 고정 길이 데이터 유형입니다. 정확히 n 바이트 데이터는 typlen 단어를 따릅니다.
필드는 Varlena 데이터 유형입니다. 다음 4 바이트는입니다 총 값이 포함 된 Varlena 헤더 자신을 포함한 길이.
향후 사용을 위해 예약.
널 비 널 필드의 경우 독자는 typlen을 확인할 수 있습니다. 대상 열에 예상되는 typlen과 일치합니다. 이것 데이터가 예상되는.
정렬 패딩 또는 기타 추가 데이터가 없습니다. 필드 사이. 또한 형식은 그렇지 않습니다 데이터 유형이 회의 별 회의인지 여부를 구별합니다 통과 값. 이 두 조항 모두 의도적입니다 파일의 이식성을 향상시키는 데 도움이 될 수 있습니다 (비록 코스 엔지니어 및 플로팅 포인트 형식 문제는 여전히 가능합니다 이진 파일을 기계를 가로 질러 이동하지 못하도록하십시오).
OID가 덤프에 포함 된 경우 OID 필드 즉시 필드 카운트 단어를 따릅니다. 그것은 정상입니다 필드 카운트에 포함되지 않는 것을 제외하고 필드. ~ 안에 특히 typlen이 있습니다 --- 이것은 처리 할 수 있습니다. 4 바이트 vs 8 바이트 OID가 너무 많은 고통없이 우리가 언젠가 Oids가 선택 과목.
다음 예제는 표준 출력으로 테이블을 복사합니다. 필드 구분 기호로서 수직 막대 (|) :
국가 복사StdoutDelimiters 사용 | ';
UNIX 파일의 데이터를 테이블 국가로 복사하려면 :
'/usr1/proj/bray/sql/country_data'에서 컨트리를 복사합니다.
테이블에 복사하는 데 적합한 데이터 샘플이 있습니다. 에서Stdin(따라서 종료가 있습니다 마지막 줄의 시퀀스) :
AF 아프가니스탄 알 알바니아 DZ 알제리 ZM 잠비아 ZW 짐바브웨 \.
각 라인의 공백은 실제로 탭입니다.
다음은 동일한 데이터이며, 이진 형식의 출력은 Linux/i586 기계. 데이터를 필터링 한 후에 데이터가 표시됩니다 유닉스 유틸리티OD -C. 테이블에는 세 가지가 있습니다 전지; 첫 번째는char (2), 두 번째는텍스트, 세 번째는Integer. 모든 행은 세 번째로 널 값을 갖습니다. 필드.
0000000 p g b c o p y \ n 377 \ r \ n \ 0 004 003 002 001 0000020 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 003 \ 0 377 377 006 \ 0 \ 0 \ 0 0000040 A F 377 377 017 \ 0 \ 0 \ 0 A F G H A N I S 0000060 T A N \ 0 \ 0 003 \ 0 377 377 006 \ 0 \ 0 \ 0 A L 377 0000100 377 \ V \ 0 \ 0 \ 0 A L B A N I A \ 0 \ 0 003 \ 0 0000120 377 377 006 \ 0 \ 0 \ 0 D Z 377 377 \ V \ 0 \ 0 \ 0 a l 0000140 g e r i a \ 0 \ 0 003 \ 0 377 377 006 \ 0 \ 0 \ 0 Z 0000160 M 377 377 \ n \ 0 \ 0 \ 0 Z A M B I A \ 0 \ 0 003 0000200 \ 0 377 377 006 \ 0 \ 0 \ 0 Z W 377 377 \ f \ 0 \ 0 \ 0 Z 0000220 I M B A B W E \ 0 \ 0 377 377