PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL \lo_import e come ottenere l'OID risultante in un comando UPDATE?

Poiché il tuo file risiede sul tuo computer locale e desideri importare il BLOB su un server remoto, hai due opzioni:

1) Trasferisci il file sul server e usa la funzione lato server :

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

2) Utilizzare il psql meta- comando come ce l'hai tu.

Ma non puoi mischiare i meta comandi psql con i comandi SQL, questo è impossibile.
Usa la variabile psql :LASTOID in un UPDATE comando che avvii subito dopo il \lo_import meta comando nella stessa sessione psql:

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

Per eseguire lo script (funziona in Linux, non ho familiarità con lo scripting della shell di 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
  • \\ è il metacomando separatore. Devi raddoppiare il \ , in un "" string, perché la shell interpreta un livello.
  • \ prima che la nuova riga sia solo la continuazione della riga nelle shell di Linux.

Sintassi alternativa (testata di nuovo su 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