PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

PostgreSQL \lo_import et comment obtenir l'OID résultant dans une commande UPDATE ?

Comme votre fichier réside sur votre machine locale et que vous souhaitez importer le blob sur un serveur distant, vous avez deux options :

1) Transférez le fichier sur le serveur et utilisez la fonction côté serveur :

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

2) Utilisez la psql meta- commande comme vous l'avez.

Mais vous ne pouvez pas mélanger les méta-commandes psql avec les commandes SQL, c'est impossible.
Utilisez la variable psql :LASTOID dans une UPDATE commande que vous lancez immédiatement après le \lo_import commande meta dans la même session psql :

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

Pour scripter cela (fonctionne sous Linux, je ne suis pas familier avec les scripts shell 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
  • \\ est la méta-commande séparateur. Vous devez doubler le \ , dans un "" chaîne, car le shell interprète une couche.
  • \ avant la nouvelle ligne est juste la continuation de la ligne dans les shells Linux.

Syntaxe alternative (testée à nouveau sous 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