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

PostgreSQL \ lo_import và cách lấy OID kết quả vào lệnh UPDATE?

Vì tệp của bạn nằm trên máy cục bộ và bạn muốn nhập blob vào máy chủ từ xa, bạn có hai tùy chọn:

1) Chuyển tệp đến máy chủ và sử dụng chức năng phía máy chủ :

UPDATE species
SET    speciesimages = lo_import('/path/to/server-local/file/zzz4.jpg')
WHERE  species = 'ACAAC04';

2) Sử dụng psql meta- lệnh như bạn có nó.

Nhưng bạn không thể kết hợp các lệnh meta psql với các lệnh SQL, điều đó là không thể.
Sử dụng biến psql :LASTOID trong một UPDATE lệnh mà bạn khởi chạy ngay sau \lo_import lệnh meta trong cùng một phiên psql:

UPDATE species
SET    speciesimages = :LASTOID
WHERE  species = 'ACAAC04';

Để tập lệnh đó (hoạt động trong Linux, tôi không quen với tập lệnh trình bao Windows):

echo "\lo_import '/path/to/my/file/zzz4.jpg' \\\\ UPDATE species SET speciesimages = :LASTOID WHERE  species = 'ACAAC04';" | \
psql -h 192.168.1.12 -p 5432 -d myDB -U my_admin
  • \\ là siêu lệnh phân tách. Bạn cần nhân đôi \ , trong một "" chuỗi, bởi vì shell diễn giải một lớp.
  • \ trước dòng mới chỉ là phần tiếp theo của dòng trong Linux shell.

Cú pháp thay thế (đã thử nghiệm lại trên Linux):

psql -h 192.168.1.12 -p 5432 -d myDB -U my_admin << EOF
\lo_import '/path/to/my/file/zzz4.jpg'
UPDATE species
SET    speciesimages = :LASTOID
WHERE  species = 'ACAAC04';
EOF


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để cấu hình postgresql lần đầu tiên?

  2. PostgreSQL khác gì với MySQL?

  3. Cấu trúc lại một hàm PL / pgSQL để trả về kết quả đầu ra của các truy vấn SELECT khác nhau

  4. PostgreSQL - Đã thực hiện cập nhật cho bảng trong một hàm tôi đã tạo và bây giờ thứ tự của các hàng trong bảng đã thay đổi

  5. Làm cách nào để viết một thủ tục được lưu trữ trong postgres mà không trả về bất cứ thứ gì?