WHERE 37WHERE 38WHERE 39WHERE 40WHERE 41WHERE 42WHERE 43WHERE 44WHERE 45WHERE 46WHERE 380WHERE 381WHERE 382WHERE 383 WHERE 1 di chuyển dữ liệu giữa các bảng PostgreSQL và các tệp hệ thống tệp tiêu chuẩn. WHERE 2 sao chép nội dung của một bảng vào một tệp, trong khi WHERE 3 sao chép dữ liệu từ một tệp vào một bảng (nối thêm dữ liệu vào bất cứ thứ gì đã có trong bảng). WHERE 2 cũng có thể sao chép kết quả của truy vấn WHERE 5Nếu một danh sách cột được chỉ định, WHERE 2 chỉ sao chép dữ liệu trong các cột được chỉ định vào tệp. Đối với WHERE 3, từng trường trong tệp được chèn theo thứ tự vào cột đã chỉ định. Các cột trong bảng không được chỉ định trong danh sách cột WHERE 3 sẽ nhận các giá trị mặc định của chúngWHERE 1 với tên tệp hướng dẫn máy chủ PostgreSQL đọc hoặc ghi trực tiếp vào tệp. Người dùng PostgreSQL phải truy cập được tệp (ID người dùng mà máy chủ chạy dưới dạng) và tên phải được chỉ định theo quan điểm của máy chủ. Khi COPY 0 được chỉ định, máy chủ sẽ thực thi lệnh đã cho và đọc từ đầu ra tiêu chuẩn của chương trình hoặc ghi vào đầu vào tiêu chuẩn của chương trình. Lệnh phải được chỉ định từ quan điểm của máy chủ và được thực thi bởi người dùng PostgreSQL. Khi COPY 1 hoặc COPY 2 được chỉ định, dữ liệu được truyền qua kết nối giữa máy khách và máy chủMỗi chương trình phụ trợ đang chạy WHERE 1 sẽ báo cáo tiến độ của nó trong chế độ xem COPY 4. Xem Phần 28. 4. 6 để biết chi tiếtThông sốCOPY 5Tên (tùy chọn lược đồ đủ điều kiện) của một bảng hiện có COPY 6Một danh sách các cột tùy chọn sẽ được sao chép. Nếu không có danh sách cột nào được chỉ định, tất cả các cột của bảng ngoại trừ các cột được tạo sẽ được sao chép COPY 7Lệnh WHERE 5, COPY 9, WHERE 90, WHERE 91 hoặc WHERE 92 có kết quả sẽ được sao chép. Lưu ý rằng dấu ngoặc đơn được yêu cầu xung quanh truy vấnĐối với các truy vấn WHERE 90, WHERE 91 và WHERE 92, phải cung cấp mệnh đề RETURNING và quan hệ đích không được có quy tắc có điều kiện, quy tắc WHERE 96 hay quy tắc WHERE 97 mở rộng thành nhiều câu lệnhWHERE 98Tên đường dẫn của tệp đầu vào hoặc đầu ra. Tên tệp đầu vào có thể là đường dẫn tuyệt đối hoặc tương đối nhưng tên tệp đầu ra phải là đường dẫn tuyệt đối. Người dùng Windows có thể cần sử dụng chuỗi WHERE 99 và nhân đôi bất kỳ dấu gạch chéo ngược nào được sử dụng trong tên đường dẫnCOPY 0Một lệnh để thực hiện. Trong WHERE 3, đầu vào được đọc từ đầu ra tiêu chuẩn của lệnh và trong WHERE 2, đầu ra được ghi vào đầu vào tiêu chuẩn của lệnhLưu ý rằng lệnh được gọi bởi trình bao, vì vậy nếu bạn cần chuyển bất kỳ đối số nào cho lệnh trình bao đến từ một nguồn không đáng tin cậy, bạn phải cẩn thận loại bỏ hoặc thoát bất kỳ ký tự đặc biệt nào có thể có ý nghĩa đặc biệt đối với trình bao. Vì lý do bảo mật, tốt nhất là sử dụng một chuỗi lệnh cố định hoặc ít nhất là tránh chuyển bất kỳ đầu vào nào của người dùng vào đó COPY 1Chỉ định rằng đầu vào đến từ ứng dụng khách COPY 2Chỉ định rằng đầu ra đi đến ứng dụng khách WHERE 45Chỉ định xem tùy chọn đã chọn sẽ được bật hay tắt. Bạn có thể viết WHERE 46, WHERE 47 hoặc WHERE 48 để bật tùy chọn và WHERE 49, WHERE 90 hoặc WHERE 91 để tắt tùy chọn đó. Giá trị WHERE 45 cũng có thể được bỏ qua, trong trường hợp đó, giá trị WHERE 46 được giả địnhWHERE 94Chọn định dạng dữ liệu được đọc hoặc ghi. WHERE 95, WHERE 96 (Các giá trị được phân tách bằng dấu phẩy) hoặc WHERE 97. Mặc định là WHERE 95WHERE 99Yêu cầu sao chép dữ liệu với các hàng đã bị đóng băng, giống như sau khi chạy lệnh WHERE 90. Đây được dự định là một tùy chọn hiệu suất để tải dữ liệu ban đầu. Các hàng sẽ chỉ bị đóng băng nếu bảng đang được tải đã được tạo hoặc cắt bớt trong giao dịch phụ hiện tại, không có con trỏ nào mở và không có ảnh chụp nhanh cũ nào được lưu giữ bởi giao dịch này. Hiện tại không thể thực hiện WHERE 91 trên bảng được phân vùngLưu ý rằng tất cả các phiên khác sẽ có thể xem dữ liệu ngay sau khi dữ liệu được tải thành công. Điều này vi phạm các quy tắc thông thường về khả năng hiển thị của MVCC và người dùng chỉ định phải nhận thức được các sự cố tiềm ẩn mà điều này có thể gây ra WHERE 92Chỉ định ký tự phân tách các cột trong mỗi hàng (dòng) của tệp. Mặc định là ký tự tab ở định dạng văn bản, dấu phẩy ở định dạng WHERE 93. Đây phải là một ký tự một byte. Tùy chọn này không được phép khi sử dụng định dạng WHERE 97WHERE 95Chỉ định chuỗi đại diện cho giá trị null. Giá trị mặc định là WHERE 96 (dấu gạch chéo ngược-N) ở định dạng văn bản và một chuỗi trống không được trích dẫn ở định dạng WHERE 93. Bạn có thể thích một chuỗi trống ngay cả ở định dạng văn bản trong trường hợp bạn không muốn phân biệt chuỗi rỗng với chuỗi trống. Tùy chọn này không được phép khi sử dụng định dạng WHERE 97Ghi chúKhi sử dụng WHERE 3, bất kỳ mục dữ liệu nào khớp với chuỗi này sẽ được lưu dưới dạng giá trị null, vì vậy bạn nên đảm bảo rằng bạn sử dụng cùng một chuỗi như bạn đã sử dụng với WHERE 2WHERE 01Chỉ định rằng tệp chứa một dòng tiêu đề với tên của từng cột trong tệp. Khi xuất ra, dòng đầu tiên chứa tên cột từ bảng. Trên đầu vào, dòng đầu tiên bị loại bỏ khi tùy chọn này được đặt thành WHERE 02 (hoặc giá trị Boolean tương đương). Nếu tùy chọn này được đặt thành WHERE 03, số lượng và tên của các cột trong dòng tiêu đề phải khớp với tên cột thực của bảng, theo thứ tự; . Tùy chọn này không được phép khi sử dụng định dạng WHERE 97. Tùy chọn WHERE 03 chỉ hợp lệ cho các lệnh WHERE 3WHERE 07Chỉ định ký tự trích dẫn sẽ được sử dụng khi giá trị dữ liệu được trích dẫn. Mặc định là trích dẫn kép. Đây phải là một ký tự một byte. Tùy chọn này chỉ được phép khi sử dụng định dạng WHERE 93WHERE 09Chỉ định ký tự sẽ xuất hiện trước ký tự dữ liệu khớp với giá trị WHERE 07. Giá trị mặc định giống như giá trị WHERE 07 (để ký tự trích dẫn được nhân đôi nếu nó xuất hiện trong dữ liệu). Đây phải là một ký tự một byte. Tùy chọn này chỉ được phép khi sử dụng định dạng WHERE 93WHERE 23Buộc trích dẫn được sử dụng cho tất cả các giá trị không phải ______495 trong mỗi cột được chỉ định. Đầu ra WHERE 95 không bao giờ được trích dẫn. Nếu WHERE 26 được chỉ định, các giá trị không phải ____495 sẽ được trích dẫn trong tất cả các cột. Tùy chọn này chỉ được phép trong WHERE 2 và chỉ khi sử dụng định dạng WHERE 93WHERE 90Không khớp các giá trị của cột được chỉ định với chuỗi rỗng. Trong trường hợp mặc định khi chuỗi null trống, điều này có nghĩa là các giá trị trống sẽ được đọc dưới dạng chuỗi có độ dài bằng 0 thay vì null, ngay cả khi chúng không được trích dẫn. Tùy chọn này chỉ được phép trong WHERE 3 và chỉ khi sử dụng định dạng WHERE 93WHERE 93Khớp các giá trị của cột đã chỉ định với chuỗi rỗng, ngay cả khi nó đã được trích dẫn và nếu tìm thấy khớp, hãy đặt giá trị thành WHERE 95. Trong trường hợp mặc định khi chuỗi null trống, điều này sẽ chuyển đổi chuỗi rỗng được trích dẫn thành NULL. Tùy chọn này chỉ được phép trong WHERE 3 và chỉ khi sử dụng định dạng WHERE 93WHERE 97Chỉ định rằng tệp được mã hóa trong WHERE 98. Nếu tùy chọn này bị bỏ qua, mã hóa máy khách hiện tại được sử dụng. Xem Ghi chú bên dưới để biết thêm chi tiếtWHERE 99Mệnh đề tùy chọn WHERE 99 có dạng tổng quátWHERE trong đó WHERE 01 là bất kỳ biểu thức nào đánh giá kết quả của loại WHERE 45. Hàng nào không thỏa mãn điều kiện này sẽ không được chèn vào bảng. Một hàng thỏa mãn điều kiện nếu nó trả về true khi các giá trị hàng thực tế được thay thế cho bất kỳ tham chiếu biến nàoHiện tại, các truy vấn phụ không được phép trong biểu thức WHERE 99 và quá trình đánh giá không thấy bất kỳ thay đổi nào do chính WHERE 1 thực hiện (điều này quan trọng khi biểu thức chứa các lệnh gọi đến hàm WHERE 05)đầu raKhi hoàn thành thành công, lệnh WHERE 1 trả về thẻ lệnh có dạngCOPY WHERE 07 là số hàng được sao chépghi chúWHERE 2 chỉ có thể được sử dụng với các bảng đơn giản, không phải dạng xem và không sao chép các hàng từ bảng con hoặc phân vùng con. Ví dụ: WHERE 09 TO sao chép các hàng giống như WHERE 10. Cú pháp WHERE 11) TO. có thể được sử dụng để kết xuất tất cả các hàng trong hệ thống phân cấp thừa kế, bảng được phân vùng hoặc dạng xemWHERE 3 có thể được sử dụng với các bảng đơn giản, nước ngoài hoặc được phân vùng hoặc với các dạng xem có trình kích hoạt WHERE 13Bạn phải có đặc quyền chọn trên bảng có các giá trị được đọc bởi WHERE 2 và chèn đặc quyền trên bảng mà các giá trị được chèn bởi WHERE 3. Chỉ cần có đặc quyền cột trên (các) cột được liệt kê trong lệnh là đủNếu bảo mật mức hàng được bật cho bảng, các chính sách WHERE 5 có liên quan sẽ áp dụng cho câu lệnh WHERE 09 TO. Hiện tại, WHERE 3 không được hỗ trợ cho các bảng có bảo mật cấp hàng. Thay vào đó, hãy sử dụng các câu lệnh WHERE 90 tương đươngCác tệp có tên trong lệnh WHERE 1 được đọc hoặc ghi trực tiếp bởi máy chủ, không phải bởi ứng dụng khách. Do đó, chúng phải nằm trên hoặc có thể truy cập được vào máy chủ cơ sở dữ liệu chứ không phải máy khách. Chúng phải có thể truy cập và có thể đọc hoặc ghi bởi người dùng PostgreSQL (ID người dùng mà máy chủ chạy dưới dạng đó), chứ không phải máy khách. Tương tự, lệnh được chỉ định với COPY 0 được thực thi trực tiếp bởi máy chủ, không phải bởi ứng dụng khách, phải được thực thi bởi người dùng PostgreSQL. WHERE 1 đặt tên tệp hoặc lệnh chỉ được phép đối với siêu người dùng cơ sở dữ liệu hoặc người dùng được cấp một trong các vai trò WHERE 23, WHERE 24 hoặc WHERE 25, vì nó cho phép đọc hoặc ghi bất kỳ tệp nào hoặc chạy chương trình mà máy chủ có đặc quyền truy cậpTên tệp được sử dụng trong WHERE 1 luôn được chỉ định làm đường dẫn tuyệt đối. Điều này được thực thi bởi máy chủ trong trường hợp của WHERE 2, nhưng đối với WHERE 3, bạn có tùy chọn đọc từ một tệp được chỉ định bởi một đường dẫn tương đối. Đường dẫn sẽ được diễn giải tương ứng với thư mục làm việc của quy trình máy chủ (thông thường là thư mục dữ liệu của cụm), không phải thư mục làm việc của máy kháchViệc thực thi lệnh với COPY 0 có thể bị hạn chế bởi các cơ chế kiểm soát truy cập của hệ điều hành, chẳng hạn như SELinuxWHERE 3 sẽ gọi bất kỳ trình kích hoạt nào và kiểm tra các ràng buộc trên bảng đích. Tuy nhiên, nó sẽ không gọi các quy tắcĐối với các cột nhận dạng, lệnh WHERE 3 sẽ luôn ghi các giá trị cột được cung cấp trong dữ liệu đầu vào, như tùy chọn WHERE 90 WHERE 33Đầu vào và đầu ra của WHERE 1 bị ảnh hưởng bởi WHERE 35. Để đảm bảo tính di động cho các cài đặt PostgreSQL khác có thể sử dụng cài đặt WHERE 35 không mặc định, nên đặt WHERE 35 thành WHERE 38 trước khi sử dụng WHERE 2. Bạn cũng nên tránh kết xuất dữ liệu với WHERE 40 được đặt thành WHERE 41, vì các giá trị khoảng âm có thể bị hiểu sai bởi một máy chủ có cài đặt khác cho WHERE 40Dữ liệu đầu vào được giải thích theo tùy chọn WHERE 97 hoặc mã hóa máy khách hiện tại và dữ liệu đầu ra được mã hóa theo WHERE 97 hoặc mã hóa máy khách hiện tại, ngay cả khi dữ liệu không đi qua máy khách nhưng được máy chủ đọc hoặc ghi trực tiếp vào tệpWHERE 1 dừng hoạt động ở lỗi đầu tiên. Điều này sẽ không dẫn đến các vấn đề trong trường hợp của một WHERE 2, nhưng bảng mục tiêu đã nhận được các hàng trước đó trong một WHERE 3. Những hàng này sẽ không hiển thị hoặc truy cập được, nhưng chúng vẫn chiếm dung lượng ổ đĩa. Điều này có thể dẫn đến một lượng đáng kể dung lượng ổ đĩa bị lãng phí nếu lỗi xảy ra trong một hoạt động sao chép lớn. Bạn có thể muốn gọi WHERE 48 để khôi phục không gian bị lãng phíCó thể sử dụng đồng thời WHERE 93 và WHERE 90 trên cùng một cột. Điều này dẫn đến việc chuyển đổi chuỗi null được trích dẫn thành giá trị null và chuỗi null không được trích dẫn thành chuỗi trốngĐịnh dạng tệpĐịnh dạng văn bảnKhi định dạng WHERE 95 được sử dụng, dữ liệu được đọc hoặc ghi là tệp văn bản có một dòng trên mỗi hàng của bảng. Các cột trong một hàng được phân tách bằng ký tự phân cách. Bản thân các giá trị cột là các chuỗi được tạo bởi hàm đầu ra hoặc được hàm đầu vào chấp nhận đối với loại dữ liệu của từng thuộc tính. Chuỗi null được chỉ định được sử dụng thay cho các cột null. WHERE 3 sẽ phát sinh lỗi nếu bất kỳ dòng nào của tệp đầu vào chứa nhiều hoặc ít cột hơn dự kiếnKết thúc dữ liệu có thể được biểu thị bằng một dòng chỉ chứa dấu gạch chéo ngược ( WHERE 53). Điểm đánh dấu kết thúc dữ liệu là không cần thiết khi đọc từ một tệp, vì phần cuối của tệp phục vụ hoàn toàn tốt; . 0 giao thức máy kháchCác ký tự dấu gạch chéo ngược ( WHERE 54) có thể được sử dụng trong dữ liệu WHERE 1 để trích dẫn các ký tự dữ liệu có thể được coi là dấu phân cách hàng hoặc cột. Đặc biệt, các ký tự sau đây phải được đặt trước dấu gạch chéo ngược nếu chúng xuất hiện dưới dạng một phần của giá trị cột. dấu gạch chéo ngược, xuống dòng, xuống dòng và ký tự phân cách hiện tạiChuỗi null đã chỉ định được gửi bởi WHERE 2 mà không cần thêm bất kỳ dấu gạch chéo ngược nào; . Do đó, không thể nhầm lẫn một chuỗi null chẳng hạn như WHERE 96 với giá trị dữ liệu thực tế WHERE 96 (sẽ được biểu thị là WHERE 60)Các chuỗi dấu gạch chéo ngược đặc biệt sau đây được nhận dạng bởi WHERE 3SequenceRepresents WHERE 62Backspace (ASCII 8)WHERE 63Nguồn cấp dữ liệu biểu mẫu (ASCII 12)WHERE 64Dòng mới (ASCII 10)WHERE 65Dấu gạch chéo ngược (ASCII 13)WHERE 66Tab (ASCII 9)WHERE 67Tab dọc (ASCII 11)WHERE 54WHERE 69Dấu gạch chéo ngược theo sau bởi một đến ba chữ số bát phân _____067 theo sau dấu gạch chéo ngược số đó _WHERE 67 Hiện tại, WHERE 2 sẽ không bao giờ phát ra chuỗi dấu gạch chéo ngược bát phân hoặc chữ số hex, nhưng nó sử dụng các chuỗi khác được liệt kê ở trên cho các ký tự điều khiển đóBất kỳ ký tự gạch chéo ngược nào khác không được đề cập trong bảng trên sẽ được lấy để đại diện cho chính nó. Tuy nhiên, hãy cẩn thận khi thêm dấu gạch chéo ngược một cách không cần thiết, vì điều đó có thể vô tình tạo ra một chuỗi khớp với điểm đánh dấu cuối dữ liệu ( WHERE 53) hoặc chuỗi rỗng (WHERE 96 theo mặc định). Các chuỗi này sẽ được nhận dạng trước khi thực hiện bất kỳ quá trình xử lý dấu gạch chéo ngược nào khácChúng tôi đặc biệt khuyến nghị rằng các ứng dụng tạo dữ liệu WHERE 1 sẽ chuyển đổi dữ liệu xuống dòng mới và xuống dòng tương ứng với chuỗi WHERE 64 và WHERE 65. Hiện tại, có thể biểu diễn trả về xuống dòng dữ liệu bằng dấu gạch chéo ngược và xuống dòng và biểu thị một dòng dữ liệu mới bằng dấu gạch chéo ngược và xuống dòng. Tuy nhiên, những đại diện này có thể không được chấp nhận trong các bản phát hành trong tương lai. Chúng cũng rất dễ bị hỏng nếu tệp WHERE 1 được chuyển qua các máy khác nhau (ví dụ: từ Unix sang Windows hoặc ngược lại)Tất cả các chuỗi dấu gạch chéo ngược được giải thích sau khi chuyển đổi mã hóa. Các byte được chỉ định với chuỗi dấu gạch chéo ngược chữ số bát phân và chữ số thập lục phân phải tạo thành các ký tự hợp lệ trong mã hóa cơ sở dữ liệu WHERE 2 sẽ kết thúc mỗi hàng bằng một dòng mới kiểu Unix (“WHERE 64”). Thay vào đó, các máy chủ chạy trên Microsoft Windows xuất ký tự xuống dòng/dòng mới (“WHERE 82”), nhưng chỉ dành cho WHERE 1 vào tệp máy chủ; . WHERE 3 có thể xử lý các dòng kết thúc bằng dòng mới, xuống dòng hoặc xuống dòng/dòng mới. Để giảm nguy cơ mắc lỗi do dấu gạch chéo ngược xuống dòng hoặc xuống dòng có nghĩa là dữ liệu, ________ 03 sẽ khiếu nại nếu các dòng kết thúc trong đầu vào không giống nhauĐịnh dạng CSVTùy chọn định dạng này được sử dụng để nhập và xuất định dạng tệp Giá trị được phân tách bằng dấu phẩy ( WHERE 93) được sử dụng bởi nhiều chương trình khác, chẳng hạn như bảng tính. Thay vì các quy tắc thoát được định dạng văn bản chuẩn của PostgreSQL sử dụng, nó tạo và nhận ra cơ chế thoát CSV chungCác giá trị trong mỗi bản ghi được phân tách bằng ký tự WHERE 92. Nếu giá trị chứa ký tự phân cách, ký tự WHERE 07, chuỗi WHERE 95, ký tự xuống dòng hoặc ký tự xuống dòng, thì toàn bộ giá trị được thêm tiền tố và hậu tố bởi ký tự WHERE 07 và bất kỳ sự xuất hiện nào trong giá trị của ký tự WHERE 07 hoặc ký tự . Bạn cũng có thể sử dụng WHERE 23 để buộc trích dẫn khi xuất các giá trị không phải WHERE 95 trong các cột cụ thểĐịnh dạng WHERE 93 không có cách tiêu chuẩn để phân biệt giá trị WHERE 95 với một chuỗi trống. PostgreSQL's WHERE 1 xử lý việc này bằng cách trích dẫn. Một WHERE 95 được xuất ra dưới dạng chuỗi tham số WHERE 95 và không được trích dẫn, trong khi giá trị không phải WHERE 95 khớp với chuỗi tham số WHERE 95 được trích dẫn. Ví dụ: với cài đặt mặc định, WHERE 95 được viết dưới dạng chuỗi trống không được trích dẫn, trong khi giá trị dữ liệu chuỗi trống được viết bằng dấu ngoặc kép (COPY 05). Đọc các giá trị tuân theo các quy tắc tương tự. Bạn có thể sử dụng WHERE 90 để ngăn so sánh đầu vào WHERE 95 cho các cột cụ thể. Bạn cũng có thể sử dụng WHERE 93 để chuyển đổi các giá trị dữ liệu chuỗi rỗng được trích dẫn thành WHERE 95Bởi vì dấu gạch chéo ngược không phải là một ký tự đặc biệt trong định dạng WHERE 93, nên WHERE 53, điểm đánh dấu kết thúc dữ liệu, cũng có thể xuất hiện dưới dạng một giá trị dữ liệu. Để tránh bất kỳ sự hiểu sai nào, giá trị dữ liệu WHERE 53 xuất hiện dưới dạng một mục duy nhất trên một dòng sẽ tự động được trích dẫn trên đầu ra và trên đầu vào, nếu được trích dẫn, sẽ không được hiểu là điểm đánh dấu kết thúc dữ liệu. Nếu bạn đang tải một tệp được tạo bởi một ứng dụng khác có một cột không được trích dẫn và có thể có giá trị là WHERE 53, thì bạn có thể cần trích dẫn giá trị đó trong tệp đầu vàoGhi chúỞ định dạng WHERE 93, tất cả các ký tự đều có ý nghĩa. Giá trị được trích dẫn bao quanh bởi khoảng trắng hoặc bất kỳ ký tự nào khác ngoài WHERE 92, sẽ bao gồm các ký tự đó. Điều này có thể gây ra lỗi nếu bạn nhập dữ liệu từ một hệ thống đệm các dòng WHERE 93 có khoảng trắng ở một số chiều rộng cố định. Nếu tình huống như vậy phát sinh, bạn có thể cần phải xử lý trước tệp WHERE 93 để xóa khoảng trắng ở cuối, trước khi nhập dữ liệu vào PostgreSQLGhi chúĐịnh dạng CSV sẽ nhận dạng và tạo tệp CSV với các giá trị được trích dẫn chứa dấu xuống dòng và nguồn cấp dữ liệu được nhúng. Do đó, các tệp không hoàn toàn là một dòng trên mỗi hàng của bảng như các tệp định dạng văn bản Ghi chúNhiều chương trình tạo ra các tệp CSV kỳ lạ và đôi khi sai lệch, vì vậy định dạng tệp mang tính quy ước hơn là tiêu chuẩn. Do đó, bạn có thể gặp phải một số tệp không thể nhập bằng cơ chế này và WHERE 1 có thể tạo tệp mà các chương trình khác không thể xử lýĐịnh dạng nhị phânTùy chọn định dạng WHERE 97 khiến tất cả dữ liệu được lưu trữ/đọc dưới dạng định dạng nhị phân thay vì dưới dạng văn bản. Nó nhanh hơn một chút so với định dạng văn bản và WHERE 93, nhưng tệp định dạng nhị phân ít di động hơn trên các kiến trúc máy và phiên bản PostgreSQL. Ngoài ra, định dạng nhị phân là loại dữ liệu rất cụ thể; Định dạng tệp WHERE 97 bao gồm tiêu đề tệp, không hoặc nhiều bộ dữ liệu chứa dữ liệu hàng và đoạn giới thiệu tệp. Tiêu đề và dữ liệu theo thứ tự byte mạngGhi chúPostgreSQL phát hành trước 7. 4 đã sử dụng định dạng tệp nhị phân khác Tiêu đề tệpTiêu đề tệp bao gồm 15 byte trường cố định, theo sau là vùng mở rộng tiêu đề có độ dài thay đổi. Các trường cố định là Chữ ký Chuỗi 11 byte COPY 24 — lưu ý rằng byte 0 là một phần bắt buộc của chữ ký. (Chữ ký được thiết kế để cho phép dễ dàng xác định các tệp đã bị trộn bởi quá trình truyền không sạch 8 bit. Chữ ký này sẽ bị thay đổi bởi các bộ lọc dịch cuối dòng, bỏ byte 0, bỏ bit cao hoặc thay đổi chẵn lẻ. )trường cờMặt nạ bit số nguyên 32 bit để biểu thị các khía cạnh quan trọng của định dạng tệp. Bit được đánh số từ 0 (LSB) đến 31 (MSB). Lưu ý rằng trường này được lưu trữ theo thứ tự byte mạng (byte quan trọng nhất trước), cũng như tất cả các trường số nguyên được sử dụng trong định dạng tệp. Các bit 16–31 được dành riêng để biểu thị các vấn đề quan trọng về định dạng tệp; . Các bit 0–15 được dành riêng để báo hiệu các vấn đề về định dạng tương thích ngược; . Hiện tại chỉ có một bit cờ được xác định và phần còn lại phải bằng 0 bit 16 Nếu 1, OID được bao gồm trong dữ liệu; . Các cột hệ thống Oid không được hỗ trợ trong PostgreSQL nữa, nhưng định dạng vẫn chứa chỉ báo Độ dài vùng mở rộng tiêu đềSố nguyên 32 bit, độ dài tính bằng byte của phần còn lại của tiêu đề, không bao gồm chính. Hiện tại, giá trị này bằng 0 và bộ đầu tiên theo sau ngay lập tức. Những thay đổi trong tương lai đối với định dạng có thể cho phép có thêm dữ liệu trong tiêu đề. Người đọc nên âm thầm bỏ qua bất kỳ dữ liệu mở rộng tiêu đề nào mà họ không biết phải làm gì với Khu vực mở rộng tiêu đề được hình dung để chứa một chuỗi các khối tự xác định. Trường cờ không nhằm mục đích cho người đọc biết nội dung trong khu vực mở rộng. Thiết kế cụ thể của nội dung mở rộng tiêu đề được để lại cho bản phát hành sau Thiết kế này cho phép cả bổ sung tiêu đề tương thích ngược (thêm các đoạn mở rộng tiêu đề hoặc đặt các bit cờ có thứ tự thấp) và các thay đổi không tương thích ngược (đặt các bit cờ có thứ tự cao để báo hiệu các thay đổi đó và thêm dữ liệu hỗ trợ vào phần mở rộng bộ dữ liệuMỗi bộ dữ liệu bắt đầu bằng số nguyên 16 bit của số trường trong bộ dữ liệu. (Hiện tại, tất cả các bộ dữ liệu trong một bảng sẽ có cùng số lượng, nhưng điều đó có thể không phải lúc nào cũng đúng. ) Sau đó, được lặp lại cho từng trường trong bộ dữ liệu, có một từ có độ dài 32 bit theo sau là nhiều byte dữ liệu trường đó. (Từ độ dài không bao gồm chính nó và có thể bằng 0. ) Trong trường hợp đặc biệt, -1 biểu thị giá trị trường NULL. Không có byte giá trị nào theo sau trong trường hợp NULL Không có phần đệm căn chỉnh hoặc bất kỳ dữ liệu bổ sung nào khác giữa các trường Hiện tại, tất cả các giá trị dữ liệu trong tệp định dạng nhị phân được coi là ở định dạng nhị phân (mã định dạng một). Người ta dự đoán rằng tiện ích mở rộng trong tương lai có thể thêm trường tiêu đề cho phép chỉ định mã định dạng cho mỗi cột Để xác định định dạng nhị phân thích hợp cho dữ liệu bộ dữ liệu thực tế, bạn nên tham khảo nguồn PostgreSQL, đặc biệt là các hàm COPY 25 và COPY 26 cho từng loại dữ liệu của cột (thông thường các hàm này được tìm thấy trong thư mục COPY 27 của phân phối nguồn)Nếu các OID được bao gồm trong tệp, trường OID ngay sau từ đếm trường. Đó là một trường bình thường ngoại trừ việc nó không được bao gồm trong số trường. Lưu ý rằng các cột hệ thống oid không được hỗ trợ trong các phiên bản PostgreSQL hiện tại Đoạn giới thiệu tệpĐoạn giới thiệu tệp bao gồm một từ số nguyên 16 bit chứa -1. Điều này dễ dàng phân biệt với từ đếm trường của tuple Người đọc sẽ báo lỗi nếu từ đếm trường không phải là -1 cũng như số lượng cột dự kiến. Điều này cung cấp một kiểm tra bổ sung chống lại việc bằng cách nào đó không đồng bộ hóa với dữ liệu ví dụVí dụ sau đây sao chép một bảng tới máy khách bằng cách sử dụng thanh dọc (______928) làm dấu phân cách trường WHERE 9Để sao chép dữ liệu từ một tệp vào bảng COPY 29WHERE 4Để sao chép vào một tệp chỉ các quốc gia có tên bắt đầu bằng 'A' WHERE 9Để sao chép vào một tệp nén, bạn có thể chuyển đầu ra thông qua một chương trình nén bên ngoài WHERE 9Đây là một mẫu dữ liệu phù hợp để sao chép vào bảng từ COPY 1WHERE 0Lưu ý rằng khoảng trắng trên mỗi dòng thực sự là một ký tự tab Sau đây là cùng một dữ liệu, đầu ra ở định dạng nhị phân. Dữ liệu được hiển thị sau khi lọc qua tiện ích Unix COPY 31. Bảng có ba cột; . Tất cả các hàng có giá trị null trong cột thứ baWHERE 2khả năng tương thíchKhông có câu lệnh WHERE 1 trong tiêu chuẩn SQLCú pháp sau đã được sử dụng trước PostgreSQL phiên bản 9. 0 và vẫn được hỗ trợ WHERE 9Lưu ý rằng trong cú pháp này, COPY 36 và WHERE 93 được coi là các từ khóa độc lập, không phải là đối số của tùy chọn WHERE 94 |