sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL \lo_import en hoe de resulterende OID in een UPDATE-opdracht te krijgen?

Aangezien uw bestand zich op uw lokale computer bevindt en u de blob naar een externe server wilt importeren, heeft u twee opties:

1) Breng het bestand over naar de server en gebruik de server-side functie :

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

2) Gebruik de psql-meta- commando alsof je het hebt.

Maar je kunt psql-metacommando's niet combineren met SQL-commando's, dat is onmogelijk.
Gebruik de psql-variabele :LASTOID in een UPDATE commando dat u onmiddellijk start na de \lo_import meta-opdracht in dezelfde psql-sessie:

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

Om dat te scripten (werkt in Linux, ik ben niet bekend met Windows shell-scripting):

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
  • \\ is het scheidingsteken meta-commando. U moet de \ . verdubbelen , in een "" string, omdat de shell één laag interpreteert.
  • \ voor de nieuwe regel is gewoon de voortzetting van de regel in Linux-shells.

Alternatieve syntaxis (opnieuw getest op 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


  1. Selecteer meerdere id's uit een PostgreSQL-reeks

  2. Hoe verwijder je automatisch alle referentierijen als de bovenliggende rij wordt verwijderd in mysql?

  3. Blob in Oracle-database invoegen met C#

  4. Rekening houden met DST in Postgres, bij het selecteren van geplande items