PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Làm cách nào để xuất tệp toàn văn bằng SQL?

COPY không được thiết kế cho việc này. Nó có nghĩa là để xử lý dữ liệu có cấu trúc bảng, vì vậy nó không thể hoạt động nếu không có một số cách phân chia hàng và cột; sẽ luôn có một số ký tự COPY FROM diễn giải như dấu phân cách và COPY TO sẽ chèn một số chuỗi thoát nếu nó tìm thấy một chuỗi trong dữ liệu của bạn. Điều này không tuyệt vời nếu bạn đang tìm kiếm cơ sở I / O tệp chung.

Trên thực tế, các máy chủ cơ sở dữ liệu không được thiết kế cho I / O tệp chung. Đối với một điều, bất cứ điều gì tương tác trực tiếp với hệ thống tệp của máy chủ sẽ yêu cầu vai trò siêu người dùng. Nếu có thể, bạn chỉ nên truy vấn bảng như bình thường và xử lý I / O tệp ở phía máy khách.

Điều đó nói rằng, có một số lựa chọn thay thế:

  • Tích hợp sẵn pg_read_file() pg_file_write() từ adminpack , cung cấp giao diện trực tiếp nhất cho hệ thống tệp, nhưng cả hai đều bị hạn chế trong thư mục dữ liệu của cụm (và tôi không khuyên bạn nên lưu trữ các tệp ngẫu nhiên do người dùng tạo trong đó).
  • lo_import()lo_export() là các chức năng tích hợp duy nhất mà tôi biết xử lý trực tiếp với I / O tệp và có quyền truy cập không hạn chế vào hệ thống tệp của máy chủ (trong các ràng buộc do hệ điều hành chủ áp đặt), nhưng giao diện Large Object không đặc biệt thân thiện với người dùng ....
  • Nếu bạn cài đặt biến thể không đáng tin cậy của ngôn ngữ thủ tục như Perl ( plperlu ) hoặc Python ( plpythonu ), bạn có thể viết các hàm trình bao bọc cho các quy trình I / O bản địa của ngôn ngữ đó.
  • Không có nhiều thứ bạn không thể hoàn thành thông qua COPY TO PROGRAM nếu bạn đủ quyết tâm - cho một, bạn có thể COPY (SELECT 1) TO PROGRAM 'mv <source_file> <target_file>' để khắc phục các hạn chế của pg_file_write() - mặc dù điều này phần nào làm mờ ranh giới giữa SQL và các công cụ bên ngoài (và bất kỳ ai kế thừa cơ sở mã của bạn có thể sẽ không ấn tượng ...).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PDO không ném ngoại lệ với các tham số không liên kết (và không có biến trong truy vấn)

  2. Làm thế nào để viết một bảng trong PostgreSQL từ R?

  3. Các truy vấn PostgreSQL không bị giết khi tắt máy chủ ứng dụng

  4. PostgreSQL - giá trị nối tiếp tiếp theo trong bảng

  5. PLINQ trên ConcurrentQueue không phải là đa luồng