PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PostgreSQL \lo_import und wie bekomme ich die resultierende OID in einen UPDATE-Befehl?

Da sich Ihre Datei auf Ihrem lokalen Computer befindet und Sie das Blob auf einen Remote-Server importieren möchten, haben Sie zwei Möglichkeiten:

1) Übertragen Sie die Datei auf den Server und verwenden Sie die serverseitige Funktion :

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

2) Verwenden Sie das psql-Meta- Befehl wie du es hast.

Aber Sie können psql-Metabefehle nicht mit SQL-Befehlen mischen, das ist unmöglich.
Verwenden Sie die psql-Variable :LASTOID in einem UPDATE Befehl, den Sie unmittelbar nach \lo_import starten meta-Befehl in derselben psql-Sitzung:

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

Um das zu skripten (funktioniert unter Linux, bin ich mit Windows-Shell-Skripting nicht vertraut):

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
  • \\ ist der Separator-Metabefehl. Sie müssen den \ verdoppeln , in einem "" string, da die Shell eine Ebene interpretiert.
  • \ vor dem Zeilenumbruch ist in Linux-Shells nur die Zeilenfortsetzung.

Alternative Syntax (erneut unter Linux getestet):

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