sql >> Base de Datos >  >> RDS >> PostgreSQL

PostgreSQL \ lo_import y cómo obtener el OID resultante en un comando ACTUALIZAR?

Como su archivo reside en su máquina local y desea importar el blob a un servidor remoto, tiene dos opciones:

1) Transfiera el archivo al servidor y use la función del lado del servidor :

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

2) Use el psql meta- comando como lo tienes.

Pero no puede mezclar metacomandos psql con comandos SQL, eso es imposible.
Use la variable psql :LASTOID en un UPDATE comando que ejecuta inmediatamente después de \lo_import comando meta en la misma sesión de psql:

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

Para escribir eso (funciona en Linux, no estoy familiarizado con las secuencias de comandos de shell de 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
  • \\ es el metacomando separador. Necesitas duplicar el \ , en un "" cadena, porque el shell interpreta una capa.
  • \ antes de la nueva línea es solo la continuación de la línea en los shells de Linux.

Sintaxis alternativa (probada nuevamente en 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