sql >> Database teknologi >  >> RDS >> PostgreSQL

PostgreSQL \lo_import og hvordan får man den resulterende OID ind i en UPDATE kommando?

Da din fil ligger på din lokale maskine, og du vil importere klatten til en ekstern server, har du to muligheder:

1) Overfør filen til serveren og brug server-side-funktionen :

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

2) Brug psql meta- kommando som du har det.

Men du kan ikke blande psql-metakommandoer med SQL-kommandoer, det er umuligt.
Brug psql-variablen :LASTOID i en UPDATE kommando, som du starter umiddelbart efter \lo_import meta-kommando i samme psql-session:

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

For at scripte det (fungerer i Linux, jeg er ikke bekendt med 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
  • \\ er separator-metakommandoen. Du skal fordoble \ , i en "" streng, fordi skallen fortolker ét lag.
  • \ før den nye linje er blot linjefortsættelsen i Linux-skaller.

Alternativ syntaks (testet 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. Læs fra fil til variabel - Bash Script take2

  2. symfony2 med doktrin kan ikke oprette forbindelse til ekstern mysql-database

  3. Opret en automatisk stigningskolonne i SQLite

  4. SQLite UNDTAGET operatør