sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL \lo_import och hur får man den resulterande OID till ett UPDATE-kommando?

Eftersom din fil finns på din lokala dator och du vill importera klumpen till en fjärrserver, har du två alternativ:

1) Överför filen till servern och använd serversidans funktion :

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

2) Använd psql-meta- kommando som du har det.

Men du kan inte blanda psql-metakommandon med SQL-kommandon, det är omöjligt.
Använd psql-variabeln :LASTOID i en UPDATE kommandot som du startar omedelbart efter \lo_import metakommando i samma psql-session:

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

För att skripta som (fungerar i Linux, jag är inte bekant med Windows-skalskript):

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
  • \\ är separatormetakommandot. Du måste dubbla \ , i en "" sträng, eftersom skalet tolkar ett lager.
  • \ innan den nya raden är bara radens fortsättning i Linux-skal.

Alternativ syntax (testad på Linux igen):

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. SQL - Hur man ändrar ordningen på en urvalsfråga som använder limit-begränsningen

  2. Hur man väljer en användarvänlig databas för ditt företag

  3. MySQL-konfiguration för flytande NHibernate

  4. ASPNETDB.mdf för MySQL