지원 버전 :현재(17) /16 / 15 / 14 / 13
개발 버전 :18 / Devel
지원되지 않는 버전 :12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1

롤 토토

복사 - 파일과 테이블 사이의 데이터 복사

시놉시스

롤 토토table_name[(column_name[, ...])]
    에서  'filename' | 프로그램 '명령' | stdin
    [ [ 와 함께 ] (옵션[, ...])]
    [ 어디조건]

복사table_name[(column_name[, ...]) | (쿼리)
    에게  'filename' | 프로그램 '명령' | stdout
    [ [ 와 함께 ] (옵션[, ...])여기서옵션|형식Format_name동결 [부울]
    Delimiter 'delimiter_character'
    NULL 'null_string'
    기본 'default_string'
    헤더 [부울| 성냥 ]
    인용하다 'QUOTE_CHARACTER'
    탈출하다 'Escape_character'
    force_quote (column_name[, ...]) | *
    force_not_null (column_name[, ...]) | *
    force_null (column_name[, ...]) | *
    on_errorERROR_ACTION인코딩 'encoding_name'
    log_verbosityVerbosity

설명

롤 토토간에 데이터 이동postgresql표 및 표준 파일 시스템 파일.복사테이블의 내용을 복사합니다to파일, while복사데이터 복사From테이블에 파일 (이미 테이블에있는 모든 것에 데이터를 추가).복사a의 결과도 복사 할 수 있습니다.select쿼리.

열 목록이 지정된 경우복사지정된 열의 데이터 만 파일에 복사합니다. 을 위한롤 토토, 파일의 각 필드는 순서대로 지정된 열에 삽입됩니다. 표에 지정되지 않은 표 열롤 토토 From열 목록은 기본값을받습니다.

롤 토토파일 이름으로 지시PostgreSQL서버 파일에서 직접 읽거나 쓸 수 있습니다. 파일은에 의해 액세스 할 수 있어야합니다.PostgreSQLuser (사용자 ID 서버가 실행되는 사용자 ID)이며 이름은 서버의 관점에서 지정되어야합니다. 언제프로그램지정되고 서버는 주어진 명령을 실행하고 프로그램의 표준 출력에서 ​​읽거나 프로그램의 표준 입력에 씁니다. 명령은 서버의 관점에서 지정되어야하며에 의해 실행 될 수 있어야합니다.PostgreSQL사용자. 언제Stdin또는Stdout지정되어 있고, 데이터는 클라이언트와 서버 간의 연결을 통해 전송됩니다.

각 백엔드 실행롤 토토PG_STAT_PROGRESS_롤 토토보기. 보다섹션 27.4.3자세한 내용.

기본적으로롤 토토처리 중에 오류가 발생하면 실패합니다. 전체 파일을로드하는 최상의 효과가 필요한 사용 사례의 경우on_error조항을 사용하여 다른 동작을 지정할 수 있습니다.

매개 변수

table_name

기존 테이블의 이름 (선택적으로 스키마 자격).

column_name

복사 할 열의 선택적 목록. 열 목록이 지정되지 않으면 생성 된 열을 제외한 테이블의 모든 열이 복사됩니다.

쿼리

aselect, , 삽입, 업데이트, 삭제또는병합결과를 복사 할 명령. 쿼리 주변에는 괄호가 필요합니다.

for삽입, 업데이트, 삭제병합쿼리 a반환조항이 제공되어야하며 대상 관계에는 조건부 규칙이 없어야합니다.또한규칙, 또는대신여러 진술로 확장하는 규칙.

filename

입력 또는 출력 파일의 경로 이름. 입력 파일 이름은 절대적 또는 상대 경로 일 수 있지만 출력 파일 이름은 절대 경로 여야합니다. Windows 사용자는를 사용해야 할 수도 있습니다.e ''경로 이름에 사용 된 등 슬래시를 문자열 및 두 배로 늘립니다.

프로그램

실행하라는 명령. 안에롤 토토, 입력은 명령의 표준 출력에서 ​​읽습니다.복사, 출력은 명령의 표준 입력에 기록됩니다.

명령은 쉘에 의해 호출되므로 신뢰할 수없는 소스에서 나오는 인수를 전달 해야하는 경우 쉘에 대한 특별한 의미를 가질 수있는 특수 문자를 벗기거나 탈출해야합니다. 보안상의 이유로, 고정 된 명령 문자열을 사용하거나 최소한 사용자 입력을 포함하지 않는 것이 가장 좋습니다.

Stdin

입력이 클라이언트 응용 프로그램에서 제공되는 것을 지정합니다.

Stdout

출력이 클라이언트 응용 프로그램으로 이동하는 것을 지정합니다.

부울

선택한 옵션을 켜거나 끄야하는지 여부를 지정합니다. 당신은 쓸 수 있습니다true, on또는1옵션을 활성화하려면거짓, OFF또는0비활성화하려면. 그만큼부울값도 생략 할 수 있습니다.true가정합니다.

형식

읽거나 쓸 수있는 데이터 형식을 선택합니다 :텍스트, CSV(쉼표 분리 값) 또는BINAGE. 기본값은텍스트.

Freeze

the 실행 후와 마찬가지로 이미 동결 된 행으로 데이터를 복사하는 요청진공 동결명령. 이는 초기 데이터 로딩을위한 성능 옵션으로 고안되었습니다. 로드 된 테이블이 현재 서브 트랜잭션에서 생성되거나 잘린 경우에만 행이 동결됩니다. 커서가 열리지 않으며이 트랜잭션에서 보유한 오래된 스냅 샷이 없습니다. 현재 A를 수행 할 수 없습니다.동결 복사분할 된 테이블에서. 이 옵션은에서만 허용됩니다.롤 토토 From.

다른 모든 세션은 데이터가 성공적으로로드되면 즉시 데이터를 볼 수 있습니다. 이것은 MVCC 가시성의 정상적인 규칙을 위반하고 사용자는 이것이 발생할 수있는 잠재적 문제를 알고 있어야합니다..

Delimiter

파일의 각 행 (줄) 내에서 열을 분리하는 문자를 지정합니다. 기본값은 텍스트 형식의 탭 문자입니다.CSV형식. 이것은 하나의 1 바이트 문자 여야합니다. 이 옵션을 사용할 때는이 옵션이 허용되지 않습니다BINAGE형식.

null

널 값을 나타내는 문자열을 지정합니다. 기본값은\ n(backslash-n) 텍스트 형식의 및 인용되지 않은 빈 문자열CSV형식. 널을 빈 문자와 구별하지 않으려는 경우 텍스트 형식의 빈 문자열을 선호 할 수 있습니다. 이 옵션을 사용할 때는이 옵션이 허용되지 않습니다BINAGE형식.

note

사용시롤 토토 FROM,이 문자열과 일치하는 모든 데이터 항목은 널 값으로 저장되므로와 동일한 문자열을 사용해야합니다복사.

기본값

기본값을 나타내는 문자열을 지정합니다. 문자열이 입력 파일에있을 때마다 해당 열의 기본값이 사용됩니다. 이 옵션은에서만 허용됩니다.롤 토토, 그리고 사용하지 않을 때만BINAGE형식.

헤더

파일에 파일에 각 열의 이름이있는 헤더 라인이 포함되어 있는지 지정합니다. 출력에서 첫 번째 줄에는 테이블의 열 이름이 포함되어 있습니다. 입력 에서이 옵션이 설정되면 첫 번째 줄이 삭제됩니다.true(또는 동등한 부울 값). 이 옵션이 설정된 경우매치, 헤더 라인의 열의 번호와 이름은 테이블의 실제 열 이름과 순서대로 일치해야합니다. 그렇지 않으면 오류가 발생합니다. 이 옵션을 사용할 때는이 옵션이 허용되지 않습니다binary형식. 그만큼매치옵션은에만 유효합니다복사명령.

QUOTE

데이터 값이 인용 될 때 사용할 인용 문자를 지정합니다. 기본값은 이중 인용입니다. 이것은 하나의 1 바이트 문자 여야합니다. 이 옵션은를 사용할 때만 허용됩니다.CSV형식.

탈출

와 일치하는 데이터 문자 앞에 나타나야하는 문자를 지정합니다QUOTE값. 기본값은와 동일합니다.QUOTEvalue (따라서 인용 문자가 데이터에 나타나면 두 배가됩니다). 이것은 하나의 1 바이트 문자 여야합니다. 이 옵션은를 사용할 때만 허용됩니다.CSV형식.

Force_quote

모든 비에 대해 사용하도록 인용하는 힘null지정된 각 열의 값.NULL출력은 인용되지 않습니다. 만약에*지정되어 있지 않습니다.NULL값은 모든 열에 인용됩니다. 이 옵션은에서만 허용됩니다.복사, 그리고 사용할 때만CSV형식.

force_not_null

지정된 열의 값과 널 문자열과 일치하지 마십시오. NULL 문자열이 비어있는 기본 경우에서는 빈 값이 인용되지 않더라도 NULL이 아닌 0 길이 스트링으로 읽습니다. 만약에*지정되어 있으며 옵션은 모든 열에 적용됩니다. 이 옵션은에서만 허용됩니다.복사CSV형식.

Force_null

24370_24502NULL. NULL 문자열이 비어있는 기본 케이스에서는 인용 된 빈 문자열을 NULL로 변환합니다. 만약에*지정되어 있으며 옵션은 모든 열에 적용됩니다. 이 옵션은에서만 허용됩니다.복사, 그리고 사용할 때만CSV형식.

on_error

열의 입력 값을 데이터 유형으로 변환하는 오류가 발생할 때 작동하는 방법을 지정합니다.ERROR_ACTIONSTOP명령에 실패하는 동안무시의미는 입력 행을 버리고 다음 행을 계속합니다. 기본값은정지.

the무시옵션은에만 적용됩니다롤 토토 FROM언제형식is텍스트또는CSV.

a통지무시 된 행 카운트가 포함 된 메시지복사적어도 하나의 행이 폐기 된 경우. 언제log_verbosity옵션이 설정되었습니다Verbose, a통지입력 파일의 줄을 포함하는 메시지와 입력 변환이 실패한 열 이름이 각각 폐기 된 행에 대해 방출됩니다.

인코딩

파일이 인코딩되어 있음을 지정합니다.encoding_name. 이 옵션이 생략되면 현재 클라이언트 인코딩이 사용됩니다. 자세한 내용은 아래 메모를 참조하십시오.

log_verbosity

a에 의해 방출되는 메시지의 양을 지정합니다롤 토토명령 :기본값또는Verbose. 만약에Verbose지정되고 처리 중에 추가 메시지가 방출됩니다.

이것은 현재에 사용되고 있습니다.롤 토토 Fromon_error옵션이 설정되었습니다무시.

여기서

선택 사항여기서조항은 일반적인 양식을 가지고 있습니다

여기서조건

여기서조건유형의 결과를 평가하는 표현입니다부울. 이 조건을 충족하지 않는 행은 테이블에 삽입되지 않습니다. 실제 행 값이 변수 참조로 대체되면 true가 반환되는 경우 행이 조건을 충족시킵니다..

현재, 하위 쿼리는 허용되지 않습니다여기서표현 및 평가에는의 변경 사항이 표시되지 않습니다.롤 토토그 자체 (이것은 표현식에 호출이 포함 된 경우휘발성기능).

출력

성공적인 완료시 A롤 토토명령은 양식의 명령 태그를 반환

롤 토토count

thecount복사 된 행 수입니다.

Note

PSQL명령이없는 경우에만이 명령 태그를 인쇄합니다복사 ... stdout에또는 이와 동등한PSQLMeta-Command\ 롤 토토 ... to stdout. 이것은 명령 태그를 방금 인쇄 한 데이터와 혼동하지 않도록하기위한 것입니다.

노트

복사뷰가 아닌 일반 테이블과 함께 만 사용할 수 있으며 하위 테이블이나 하위 파티션에서 행을 복사하지 않습니다. 예를 들어,롤 토토테이블to와 같은 행을 복사합니다select * From Only테이블. 구문복사 (select * from테이블) to ...상속 계층, 분할 된 테이블 또는보기에 모든 행을 버리는 데 사용될 수 있습니다..

롤 토토 from평범한, 외국 또는 분할 된 테이블 또는 뷰와 함께 사용할 수 있습니다삽입 대신트리거.

값이 값을 읽는 테이블에 선택된 권한이 있어야합니다복사, 그리고 값이 삽입되는 테이블에 권한을 삽입하십시오롤 토토 from. 명령에 열거 된 열에 열 권한을 갖는 것으로 충분합니다.

테이블에 대한로드 레벨 보안이 활성화 된 경우 관련select정책이 적용됩니다롤 토토테이블to진술. 현재,복사는로드 레벨 보안이있는 테이블에 대해 지원되지 않습니다. 동등한 사용삽입대신 진술.

a라는 파일롤 토토명령은 클라이언트 응용 프로그램이 아닌 서버에서 직접 읽거나 작성합니다. 따라서 클라이언트가 아닌 데이터베이스 서버 시스템에 상주하거나 액세스 할 수 있어야합니다. 그들은 접근 할 수 있고 읽을 수 있거나 쓸 수 있어야합니다.PostgreSQL사용자 (사용자는 서버가 실행되는 사용자 ID)가 아니라 클라이언트가 아닙니다. 마찬가지로 명령은프로그램클라이언트 응용 프로그램이 아닌 서버에서 직접 실행됩니다.PostgreSQL사용자.롤 토토파일 또는 명령 이름은 데이터베이스 슈퍼 사용자 또는 역할 중 하나가 부여 된 사용자에게만 허용됩니다PG_READ_SERVER_FILES, pg_write_server_files또는pg_execute_server_program, 서버에 액세스 할 권한이있는 파일을 읽거나 작성하거나 프로그램을 실행할 수 있으므로

혼동하지 마십시오롤 토토withPSQL명령어\ 롤 토토. \ 롤 토토호출stdin에서 복사또는stdout에 복사PSQL클라이언트. 따라서 파일 접근성 및 액세스 권한은 서버가 아닌 클라이언트에 따라\ 롤 토토사용됩니다.

사용 된 파일 이름이 권장됩니다.롤 토토항상 절대 경로로 지정됩니다. 이것은의 경우 서버에 의해 시행됩니다.복사하지만복사상대 경로로 지정된 파일에서 읽을 수있는 옵션이 있습니다. 이 경로는 클라이언트의 작업 디렉토리가 아닌 서버 프로세스의 작업 디렉토리 (일반적으로 클러스터의 데이터 디렉토리)에 비해 해석됩니다.

명령 실행프로그램Selinux와 같은 운영 체제의 액세스 제어 메커니즘에 의해 제한 될 수 있습니다.

복사대상 테이블에서 트리거를 호출하고 제약 조건을 확인합니다. 그러나 규칙을 호출하지 않습니다.

신원 열,롤 토토 from명령은 항상 입력 데이터에 제공된 열 값을 작성합니다.삽입옵션시스템 값을 지키는.

롤 토토입력 및 출력에 의해 영향을받습니다Datestyle. 다른 사람에 대한 이식성을 보장하려면PostgreSQL비 디폴트를 사용할 수있는 설치Datestyle설정,Datestyle로 설정해야합니다ISO사용 전복사. 또한 데이터를 덤프하지 않도록하는 것도 좋은 생각입니다.IntervalStyle설정sql_standard, 음의 간격 값이 다른 설정이 다른 서버에 의해 잘못 해석 될 수 있기 때문에IntervalStyle.

입력 데이터는에 따라 해석됩니다.인코딩옵션 또는 현재 클라이언트 인코딩 및 출력 데이터가 인코딩되어인코딩또는 현재 클라이언트 인코딩, 데이터가 클라이언트를 통과하지 않고 서버에서 직접 파일에서 읽거나 서면으로 작성하더라도.

the복사명령 입력 행이 진행될 때 입력 행을 물리적으로 삽입합니다. 명령이 실패하면이 행은 삭제 된 상태로 남겨집니다. 이 행은 보이지 않지만 여전히 디스크 공간을 차지합니다. 고장이 큰 복사 작업에 잘 발생하면 상당한 낭비 디스크 공간에 해당 할 수 있습니다.진공낭비 된 공간을 복구하는 데 사용해야합니다.

Force_nullandforce_not_null같은 열에서 동시에 사용할 수 있습니다. 이로 인해 인용 된 널 문자열을 널 값으로 변환하고 인용되지 않은 널 문자열을 빈 문자로 변환합니다.

파일 형식

텍스트 형식

언제텍스트형식이 사용되며, 데이터를 읽거나 쓰여진 데이터는 테이블 행당 한 줄의 텍스트 파일입니다. 연속의 열은 구분자 문자로 분리됩니다. 열 값 자체는 출력 함수에 의해 생성 된 문자열이거나 각 속성의 데이터 유형의 입력 함수에 허용됩니다. 지정된 NULL 문자열은 NULL의 열 대신 사용됩니다.복사입력 파일의 라인에 예상보다 열이 많거나 적은 열이 포함 된 경우 오류가 발생합니다.

데이터 끝은 백 슬래시-기간 (을 포함하는 단일 줄로 표시 될 수 있습니다.\.). 파일 끝이 완벽하게 잘 작동하기 때문에 파일에서 읽을 때 데이터 종료 마커가 필요하지 않습니다. Pre-3.0 클라이언트 프로토콜을 사용하여 클라이언트 응용 프로그램에 데이터를 복사 할 때만 필요합니다.

BackSlash 문자 (\)에서 사용할 수 있습니다롤 토토그렇지 않으면 행 또는 열 구분자로 취할 수있는 데이터 문자를 인용하는 데이터. 특히 다음 문자필수열 값의 일부로 나타나는 경우 백 슬래시가 앞서 나옵니다 : 백 슬래시 자체, Newline, Carriage Return 및 현재 분리기 문자..

지정된 널 문자열은에 의해 전송됩니다.복사백 슬래시를 추가하지 않고; 거꾸로,복사백 슬래시를 제거하기 전에 널 문자열과 입력을 일치시킵니다. 따라서와 같은 널 문자열\ n실제 데이터 값과 혼동 될 수 없습니다\ n(\\ n).

다음 특수 백 슬래시 시퀀스는에 의해 인식됩니다.롤 토토 From:

시퀀스 대표
\ b 백 스페이스 (ASCII 8)
\ f 양식 피드 (ASCII 12)
\ n Newline (ASCII 10)
\ r 캐리지 리턴 (ASCII 13)
\ t 탭 (ASCII 9)
\ V 수직 탭 (ASCII 11)
\숫자 백 슬래시 뒤에 1 ~ 3 개의 옥탈 숫자가 해당 숫자 코드로 바이트를 지정합니다
\ xDigits backslashX그 뒤에 하나 또는 두 개의 16 진수가 해당 숫자 코드로 바이트를 지정

현재,복사옥탈 또는 육각형 백 슬래시 시퀀스를 방출하지는 않지만 해당 제어 문자에 대해 위에 나열된 다른 시퀀스를 사용합니다..

위 표에 언급되지 않은 다른 백 슬래시 캐릭터는 자체를 나타내도록 취할 것입니다. 그러나 불필요하게 백 슬래시를 추가하지 않아도됩니다. 실수로 데이터 끝 마커 (와 일치하는 문자열이 생성 될 수 있기 때문입니다.\.) 또는 널 문자열 (\ n기본적으로). 이 문자열은 다른 백 슬래시 처리가 완료되기 전에 인식됩니다.

응용 프로그램을 생성하는 것이 좋습니다롤 토토데이터 변환 데이터 Newlines 및 Carriage Returns\ nand\ r각각 시퀀스. 현재 백 슬래시 및 캐리지 리턴에 의한 데이터 캐리지 리턴을 나타내고 백 슬래시 및 신규 라인에 의해 데이터 신규 라인을 나타낼 수 있습니다. 그러나 이러한 표현은 향후 릴리스에서 허용되지 않을 수 있습니다. 그들은 또한 부패에 매우 취약합니다.롤 토토파일은 다른 컴퓨터에서 전송됩니다 (예 : UNIX에서 Windows 또는 그 반대로)

모든 백 슬래시 시퀀스는 변환을 인코딩 한 후에 해석됩니다. Octal 및 Hex-Digit Backslash 시퀀스로 지정된 바이트는 데이터베이스 인코딩에서 유효한 문자를 형성해야합니다.

복사Unix 스타일의 Newline (로 각 행을 종료합니다.\ n). Microsoft Windows에서 실행되는 서버 대신 캐리지 return/newline ( 대신 출력\ r \ n)하지만 만롤 토토서버 파일로; 플랫폼 전체의 일관성을 위해stdout에 복사항상 보낸다\ n서버 플랫폼에 관계없이.복사Newlines, Carriage Returns 또는 Carriage Return/Newlines로 끝나는 선을 처리 할 수 ​​있습니다. 백사 슬래시가없는 신형 또는 데이터와 같은 캐리지 리턴으로 인한 오류의 위험을 줄이려면롤 토토입력의 줄 종말이 모두 비슷하지 않은지 불평합니다.

CSV 형식

이 형식 옵션은 쉼표로 분리 된 값을 가져오고 내보내는 데 사용됩니다 (CSV) 스프레드 시트와 같은 다른 많은 프로그램에서 사용하는 파일 형식. 에 사용 된 탈출 규칙 대신PostgreSQL의 표준 텍스트 형식은 공통을 생성하고 인식합니다CSV탈출 메커니즘.

각 레코드의 값은에 의해 분리됩니다.Delimiter문자. 값에 Delimiter 문자가 포함 된 경우QUOTE캐릭터,NULL문자열, 캐리지 리턴 또는 선 피드 문자 인 경우 전체 값은 접두사에 의해 접두사 및 접미사입니다.QUOTE캐릭터 및 A의 값 내에서 발생하는 모든 사건QUOTE캐릭터 또는탈출캐릭터는 탈출 캐릭터가 선행됩니다. 당신은 또한 사용할 수 있습니다Force_quote비 출력시 따옴표를 강제로NULL특정 열의 값.

theCSV형식은 A를 구별하는 표준 방법이 없습니다NULL빈 문자열의 값.PostgreSQL's롤 토토인용하여 이것을 처리합니다. 에이NULL출력NULL매개 변수 문자열 및 인용되지 않지만 비NULL값 일치NULL매개 변수 문자열이 인용됩니다. 예를 들어, 기본 설정으로 ANULL인용되지 않은 빈 문자열로 작성되었으며 빈 문자열 데이터 값은 이중 인용문으로 작성됩니다 (""). 읽기 값은 비슷한 규칙을 따릅니다. 사용할 수 있습니다force_not_null방지하려면null특정 열에 대한 입력 비교. 당신은 또한 사용할 수 있습니다Force_Null인용 된 null 문자열 데이터 값을 변환하려면NULL.

Backslash가 특별한 캐릭터가 아니기 때문에CSV형식,\.43385_43482\.라인의 고독 항목으로 나타나는 데이터 값은 출력시 자동 인용되며 인용 된 경우 입력시 데이터 종료 마커로 해석되지 않습니다. 단일 인용되지 않은 열이 있고 값이가있는 다른 응용 프로그램에서 생성 된 파일을로드하는 경우\., 입력 파일에 해당 값을 인용해야 할 수도 있습니다.

참고

inCSV형식, 모든 문자는 중요합니다. 공백으로 둘러싸인 인용 된 가치 또는 이외의 다른 문자Delimiter에는 해당 문자가 포함됩니다. 패드가있는 시스템에서 데이터를 가져 오면 오류가 발생할 수 있습니다.CSV공백이 고정 너비로 ​​선이있는 선. 그러한 상황이 발생하면 전처리해야 할 수도 있습니다.CSV데이터를 가져 오기 전에 후행 공백을 제거하려는 파일PostgreSQL.

Note

CSV형식은 모두 인식하고 생산합니다CSV내장 된 캐리지 리턴 및 라인 피드가 포함 된 인용 된 값이있는 파일. 따라서 파일은 텍스트 형식 파일과 같이 테이블 행당 하나의 줄이 아닙니다.

Note

많은 프로그램이 이상하고 때로는 왜곡을 생산합니다CSV파일이므로 파일 형식은 표준보다 더 규칙입니다. 따라서이 메커니즘을 사용하여 가져올 수없는 일부 파일과롤 토토다른 프로그램이 처리 할 수없는 파일을 생성 할 수 있습니다.

이진 형식

theBINAGE형식 옵션은 모든 데이터를 텍스트가 아닌 이진 형식으로 저장/읽습니다. 텍스트보다 다소 빠릅니다CSV형식이지만 이진 형식 파일은 기계 아키텍처에서 덜 휴대용입니다.PostgreSQL버전. 또한 이진 형식은 매우 데이터 유형에 따라 다릅니다. 예를 들어 a에서 이진 데이터를 출력하는 데는 작동하지 않습니다.smallint칼럼을 읽고Integer열, 텍스트 형식으로 잘 작동하지만

theBINAGE파일 형식은 파일 헤더, 행 데이터가 포함 된 튜플 이상 및 파일 트레일러로 구성됩니다. 헤더와 데이터는 네트워크 바이트 순서입니다.

Note

PostgreSQL7.4 이전에 다른 바이너리 파일 형식을 사용하기 전에 릴리스.

파일 헤더

파일 헤더는 15 바이트의 고정 필드로 구성되며 가변 길이 헤더 확장 영역으로 구성됩니다. 고정 필드는 다음과 같습니다.

서명

11 바이트 시퀀스pg롤 토토 \ n \ 377 \ r \ n \ 0- 제로 바이트는 서명의 필수 부분입니다. (서명은 8 비트 클리어 전송에 의해 munged 파일을 쉽게 식별 할 수 있도록 설계되었습니다.이 서명은 종말 변환 필터, 제로 바이트, 높은 비트 또는 패리티 변경으로 인해 변경됩니다.).

플래그 필드

32 비트 정수 비트 마스크 파일 형식의 중요한 측면을 나타냅니다. 비트는 0 (에서 번호가 매겨집니다.LSB) ~ 31 (MSB). 이 필드는 파일 형식에 사용 된 모든 정수 필드와 마찬가지로 네트워크 바이트 순서 (가장 중요한 바이트 우선)에 저장됩니다. 비트 16–31은 중요한 파일 형식 문제를 나타내도록 예약되어 있습니다. 독자는이 범위에서 예상치 못한 비트를 찾으면 중단해야합니다. 비트 0–15는 뒤로 호환 형식 문제를 나타내도록 예약되어 있습니다. 독자는이 범위에 설정된 예기치 않은 비트를 무시해야합니다. 현재 하나의 플래그 비트 만 정의되고 나머지는 0이어야합니다.

비트 16

1 인 경우 OID가 데이터에 포함됩니다. 0이면. OID 시스템 열은 지원되지 않습니다PostgreSQL더 이상, 그러나 형식에는 여전히 표시기가 포함되어 있습니다.

헤더 확장 영역 길이

32 비트 정수, 나머지 헤더의 바이트 길이는 자기를 포함하지 않습니다. 현재 이것은 0이고 첫 번째 튜플은 즉시 따릅니다. 형식으로 향후 변경하면 헤더에 추가 데이터가있을 수 있습니다. 독자는 무엇을 해야할지 모르는 헤더 확장 데이터를 조용히 건너 뛰어야합니다.

헤더 확장 영역은 일련의 자체 식별 청크를 포함하도록 구상되었습니다. 플래그 필드는 독자들에게 확장 영역에있는 것을 알려주는 것이 아닙니다. 헤더 확장 내용의 특정 설계는 나중에 릴리스를 위해 남겨 둡니다.

이 디자인은 뒤로 호환 가능한 헤더 추가 (헤더 확장 덩어리 추가 또는 저음 원격 플래그 비트를 설정) 및 비 백워드 호환 변경 (이러한 변경 사항을 알리기 위해 고차 플래그 비트를 설정하고 필요한 경우 지원 데이터를 추가 할 수 있습니다).

튜플

각 튜플은 튜플의 필드 수의 16 비트 정수 수로 시작됩니다. (현재, 테이블의 모든 튜플은 같은 카운트를 가질 것이지만 항상 사실이 아닐 수도 있습니다.) 그런 다음 튜플의 각 필드마다 반복되면 32 비트 길이의 단어와 많은 바이트의 필드 데이터가 있습니다. (길이 단어는 자체를 포함하지 않으며 0이 될 수 있습니다.) 특별한 경우 -1은 널 필드 값을 나타냅니다. 널 케이스에서는 값 바이트가 따르는 것이 없습니다.

필드간에 정렬 패딩이나 기타 추가 데이터가 없습니다.

현재 이진 형식 파일의 모든 데이터 값은 이진 형식 (형식 코드 1)으로 가정됩니다. 향후 확장자는 컬럼 당 형식 코드를 지정할 수있는 헤더 필드를 추가 할 수 있습니다.

실제 튜플 데이터에 적합한 바이너리 형식을 결정하려면PostgreSQL소스, 특히*sendand*recv각 열의 데이터 유형에 대한 함수 (일반적으로 이러한 함수는에 있습니다src/backend/utils/adt/소스 분포의 디렉토리).

OID가 파일에 포함되면 OID 필드는 즉시 필드 카운트 단어를 따릅니다. 필드 카운트에 포함되지 않는 것을 제외하고는 정상 필드입니다. OID 시스템 열은 현재 버전의에서 지원되지 않습니다.PostgreSQL.

파일 트레일러

파일 트레일러는 -1을 포함하는 16 비트 정수 단어로 구성됩니다. 이것은 튜플의 필드 카운트 단어와 쉽게 구별됩니다.

필드 카운트 워드가 -1이 아니거나 예상 된 열의 수가 아닌 경우 리더는 오류를보고해야합니다. 이것은 어떻게 든 데이터와 동기화에서 벗어나는 것에 대한 추가 점검을 제공합니다.

다음 예제는 수직 막대를 사용하여 클라이언트에게 테이블을 복사합니다 (|) 필드 구분 기자로서 :

Country Country to Stdout (delimiter '|');

파일의 데이터를에 복사하려면Country테이블 :

'/usr1/proj/bray/sql/country_data';에서 컨트리를 복사합니다.

이름이 'a'로 시작하는 국가 만 파일에 복사하려면 :

롤 토토 (Country_Name이 'A%'와 같은 국가에서 선택 *)에서 '/usr1/proj/bray/sql/a_list_countries.롤 토토';

압축 파일로 복사하려면 외부 압축 프로그램을 통해 출력을 파이프 할 수 있습니다.

'GZIP /usr1/proj/bray/sql/country_data.gz'; 프로그램에 대한 국가 복사 국가.

여기 테이블에서 복사하는 데 적합한 데이터 샘플이 있습니다.Stdin:

AF 아프가니스탄
알 알바니아
DZ 알제리
ZM 잠비아
ZW 짐바브웨

각 라인의 공백은 실제로 탭 문자입니다.

다음은 동일한 데이터이며 이진 형식의 출력입니다. UNIX 유틸리티를 통해 필터링 한 후 데이터가 표시됩니다.OD -C. 테이블에는 세 개의 열이 있습니다. 첫 번째는 유형이 있습니다char (2), 두 번째는 유형이 있습니다텍스트, 세 번째는 유형이 있습니다정수. 모든 행은 세 번째 열에 널 값이 있습니다.

0000000 p g c o p y \ n 377 \ r \ n \ 0 \ 0 \ 0 \ 0 \ 0 \ 0
0000020 \ 0 \ 0 \ 0 \ 0 003 \ 0 \ 0 \ 0 002 A F \ 0 \ 0 \ 013 A
0000040 F G H A N I S T A N 377 377 377 377 \ 0 003
0000060 \ 0 \ 0 \ 0 002 A L \ 0 \ 0 \ 0 007 A L B A N I
0000100 A 377 377 377 377 \ 0 003 \ 0 \ 0 \ 0 002 D Z \ 0 \ 0 \ 0 \ 0
0000120 007 A L G E R I A 377 377 377 377 \ 0 003 \ 0 \ 0
0000140 \ 0 002 Z M \ 0 \ 0 \ 0 006 Z A M B I A 377 377
0000160 377 377 \ 0 003 \ 0 \ 0 \ 0 002 Z W \ 0 \ 0 \ 0 \ B Z I
0000200 M B A B W E 377 377 377 377 377 377

호환성

없음롤 토토SQL 표준의 명령문.

다음 구문이 전에 사용되었습니다PostgreSQL버전 9.0 및 여전히 지원됩니다 :

롤 토토table_name[(column_name[, ...])]
    에서  'filename' | stdin
    [ [ 와 함께 ]
          [바이너리]
          [Delimiter [as] 'delimiter_character' ]]
          [null [as] 'null_string' ]]
          [CSV [헤더]
                [인용 [as] 'QUOTE_CHARACTER' ]]
                [탈출 [AS] 'Escape_character' ]]
                [힘이 아님column_name[, ...]]]]

복사table_name[(column_name[, ...]) | (쿼리)
    에게  'filename' | stdout
    [ [ 와 함께 ]
          [바이너리]
          [Delimiter [as] 'delimiter_character' ]]
          [null [as] 'null_string' ]]
          [CSV [헤더]
                [인용 [as] 'QUOTE_CHARACTER' ]]
                [탈출 [AS] 'Escape_character' ]]
                [힘 견적column_name[, ...] | *]]]

이 구문에서BINAGECSVa가 아니라 독립적 인 키워드로 취급됩니다형식옵션.

다음 구문이 전에 사용되었습니다PostgreSQL버전 7.3 및 여전히 지원됩니다 :

복사 [BANIAR]table_name'filename' | stdin
    [[사용] Delimiters 'delimiter_character' ]]
    [NULL으로 'null_string' ]]

복사 [binary]table_nameto  '56453_56463' | stdout
    [[사용] Delimiters 'delimiter_character' ]]
    [NULL으로 'null_string' ]

정정 제출

문서에 올바른 것이 없으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면