PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

PostgreSQL \lo_import e como obter o OID resultante em um comando UPDATE?


Como seu arquivo reside em sua máquina local e você deseja importar o blob para um servidor remoto, você tem duas opções:

1) Transfira o arquivo para o servidor e use a função do lado do servidor :
UPDATE species
SET    speciesimages = lo_import('/path/to/server-local/file/zzz4.jpg')
WHERE  species = 'ACAAC04';

2) Use o psql meta- comando como você tem.

Mas você não pode misturar meta comandos do psql com comandos SQL, isso é impossível.
Use a variável psql :LASTOID em um UPDATE comando que você inicia imediatamente após o \lo_import meta comando na mesma sessão psql:
UPDATE species
SET    speciesimages = :LASTOID
WHERE  species = 'ACAAC04';

Para fazer um script (funciona no Linux, não estou familiarizado com o script de shell do 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
  • \\ é o meta-comando separador. Você precisa dobrar o \ , em um "" string, porque o shell interpreta uma camada.
  • \ antes da nova linha é apenas a continuação da linha nos shells do Linux.

Sintaxe alternativa (testado no Linux novamente):
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