PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

PostgreSQL \lo_import i jak uzyskać wynikowy OID w poleceniu UPDATE?

Ponieważ plik znajduje się na komputerze lokalnym i chcesz zaimportować obiekt blob na serwer zdalny, masz dwie opcje:

1) Przenieś plik na serwer i użyj funkcji po stronie serwera :

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

2) Użyj meta- polecenie tak jak ty.

Ale nie możesz mieszać meta poleceń psql z poleceniami SQL, to jest niemożliwe.
Użyj zmiennej psql :LASTOID w UPDATE polecenie, które uruchamiasz natychmiast po \lo_import meta polecenie w tej samej sesji psql:

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

Do tego skryptu (działa w Linuksie, nie jestem zaznajomiony ze skryptami powłoki 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
  • \\ jest metapoleceniem separatora. Musisz podwoić \ , w "" string, ponieważ powłoka interpretuje jedną warstwę.
  • \ przed nową linią jest tylko kontynuacją linii w powłokach Linuksa.

Alternatywna składnia (przetestowana ponownie w systemie 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. Jak używać uuid z typem indeksu postgresql gist?

  2. Jak połączyć wszystkie wyniki z wiersza tabeli?

  3. Czy tablice są zoptymalizowane w jOOQ i PostgreSQL?

  4. Używanie warunku If w klauzuli where

  5. Zapytanie Postgresql 9.4 staje się coraz wolniejsze podczas dołączania do TSTZRANGE za pomocą &&