PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

PostgreSQL \lo_import dan bagaimana cara mendapatkan OID yang dihasilkan menjadi perintah UPDATE?

Karena file Anda berada di mesin lokal dan Anda ingin mengimpor blob ke server jauh, Anda memiliki dua opsi:

1) Transfer file ke server dan gunakan fungsi sisi server :

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

2) Gunakan psql meta- perintah seperti Anda memilikinya.

Tetapi Anda tidak dapat mencampur perintah meta psql dengan perintah SQL, itu tidak mungkin.
Gunakan variabel psql :LASTOID dalam UPDATE perintah yang Anda luncurkan segera setelah \lo_import perintah meta dalam sesi psql yang sama:

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

Untuk skrip yang (berfungsi di Linux, saya tidak terbiasa dengan skrip shell 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
  • \\ adalah meta-perintah pemisah. Anda perlu menggandakan \ , dalam "" string, karena shell menafsirkan satu lapisan.
  • \ sebelum baris baru hanyalah kelanjutan baris di shell Linux.

Sintaks alternatif (diuji lagi di 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. Analisis Log PostgreSQL Dengan pgBadger

  2. duplikat nilai kunci melanggar batasan unik - kesalahan postgres saat mencoba membuat tabel sql dari kerangka data dask

  3. Apa yang saya perlukan agar pg_dumpall berfungsi tanpa kata sandi?

  4. sqlalchemy postgresql Apakah indeks Null

  5. Fungsi Postgres untuk menyisipkan beberapa record dalam dua tabel