2012-03-21 78 views
0

我正在使用delphi 7作爲前端,postgres 9.0作爲後端的應用程序。Postgres 9.0 linux命令到windows命令轉換

我必須上傳圖像到服務器,所以我使用\lo_import\lo_export在服務器上插入圖像並從服務器獲取圖像。

我曾遇到其中需要\lo_importLASTOID這樣我就可以使用OID在我的表中更新行的問題,但我不能設置語法正確的窗口

UPDATE fishes 
SET fishesimages=17755; -- <--last OID 
WHERE fishes='0A'; 

這裏是我的關於stackoverflow.com的問題。我已經得到了答案,但腳本是一個Linux shell腳本。我不能在Windows

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 fishesimages = :LASTOID 
    WHERE fishes = '04'; 
EOF 

echo "\lo_import '/path/to/my/file/zzz4.jpg' \\\\ UPDATE species SET fishesimages = :LASTOID WHERE fishes = '04';" | \ 
psql -h 192.168.1.12 -p 5432 -d myDB -U my_admin 

運行它,我已經在Windows嘗試過這種

"C:\Program Files\PostgreSQL\9.0\bin\psql.exe" -h 192.168.1.12 -p 5432 -d myDB -U my_admin -c "\lo_import 'C://im/zzz4.jpg'"; 

然後立即(編程)即時通訊做

"C:\Program Files\PostgreSQL\9.0\bin\psql.exe" -h 192.168.1.12 -p 5432 -d myDB-U myDB_admin -c " update species SET fishesimages = :LASTOID WHERE fishes='24'" 

但我得到Syntax error at or near ":"

任何人都可以告訴我如何將它轉換爲Windows通訊?

回答

2

只要把命令放在一個文件(比如說import.psql)

-- contents of import.psql 
\lo_import '/path/to/my/file/zzz4.jpg' 
UPDATE species 
SET speciesimages = :LASTOID 
WHERE species = 'ACAAC04'; 

不是問題命令

"C:\Program Files\PostgreSQL\9.0\bin\psql.exe" -h 192.168.1.12 -p 5432 -d myDB -U my_admin -f import.psql 
+0

+ 1,哎 奏效,謝謝alot..but我覺得你的意思'.sql',而不是'.psql'..please更新,所以我可以接受 – PresleyDias 2012-03-21 07:18:37

+0

@PresleyDias我的意思是'.psql'。文件擴展名對程序無關緊要,但它是一種表示預期內容的方式。該文件包含SQL和psql-specfic指令的混合。將它稱爲'.sql'將會是一個小小的謊言。實際上,這個sql + psql的組合很明顯爲什麼你不能在一個'-c'中同時發佈。 [命令必須是服務器可完全解析的命令字符串(即,它不包含psql特有的功能),或者它是單個反斜槓命令。因此,你不能混用SQL和psql元命令。 ](http://www.postgresql.org/docs/current/static/app-psql.html) – dbenhur 2012-03-21 15:04:14