sql >> Databáze >  >> RDS >> PostgreSQL

PostgreSQL \lo_import a jak získat výsledné OID do příkazu UPDATE?

Protože je váš soubor umístěn na vašem místním počítači a chcete objekt blob importovat na vzdálený server, máte dvě možnosti:

1) Přeneste soubor na server a použijte funkci na straně serveru :

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

2) Použijte psql meta- příkaz jako byste to měli.

Ale nemůžete kombinovat psql meta příkazy s SQL-příkazy, to je nemožné.
Použijte proměnnou psql :LASTOID v UPDATE příkaz, který spustíte ihned po \lo_import meta příkaz ve stejné relaci psql:

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

Chcete-li to naskriptovat (funguje v Linuxu, neznám skriptování v prostředí 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
  • \\ je metapříkaz oddělovače. Musíte zdvojnásobit \ , v "" řetězec, protože shell interpretuje jednu vrstvu.
  • \ před novým řádkem je pouze pokračování řádku v linuxových shellech.

Alternativní syntaxe (opět testováno na Linuxu):

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. Jak vytvořit VARRAY jako databázový objekt v databázi Oracle

  2. 10 tipů a triků pro správu efektivní databáze

  3. FUNCTION SUM neexistuje

  4. Zpracování poddotazu mySQL, který vrací více řádků