PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

PostgreSQL \lo_import और परिणामी OID को UPDATE कमांड में कैसे प्राप्त करें?

चूंकि आपकी फ़ाइल आपकी स्थानीय मशीन पर रहती है और आप ब्लॉब को किसी दूरस्थ सर्वर पर आयात करना चाहते हैं, आपके पास दो विकल्प हैं:

1) फ़ाइल को सर्वर में स्थानांतरित करें और सर्वर-साइड फ़ंक्शन का उपयोग करें :

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

2) psql मेटा का उपयोग करें- आदेश जैसे आपके पास है।

लेकिन आप psql मेटा कमांड को SQL-कमांड के साथ नहीं मिला सकते हैं, यह असंभव है।
psql वेरिएबल :LASTOID का उपयोग करें एक UPDATE . में कमांड जिसे आप \lo_import . के तुरंत बाद लॉन्च करते हैं उसी psql सत्र में मेटा कमांड:

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

उस स्क्रिप्ट के लिए (लिनक्स में काम करता है, मैं विंडोज शेल स्क्रिप्टिंग से परिचित नहीं हूं):

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
  • \\ विभाजक मेटा-कमांड है। आपको \ . को दोगुना करना होगा , एक "" . में स्ट्रिंग, क्योंकि शेल एक परत की व्याख्या करता है।
  • \ नई लाइन से पहले लिनक्स शेल्स में सिर्फ लाइन निरंतरता है।

वैकल्पिक सिंटैक्स (लिनक्स पर फिर से परीक्षण किया गया):

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. होस्ट नाम पोस्टग्रेज़ को पते में अनुवाद नहीं कर सका:नाम या सेवा ज्ञात नहीं है

  2. दिए गए महीने के लिए सप्ताह के अंतराल की श्रृंखला उत्पन्न करें

  3. PostgreSQL 9.3:डायनेमिक पिवट टेबल

  4. स्टेटमेंट की तुलना में तैयार किए गए स्टेटमेंट के साथ क्वेरी बहुत धीमी है

  5. Postgresql डेटाबेस द्वारा उपयोग किए जाने वाले कुल डिस्क स्थान का पता लगाता है