2011-04-14 11 views
12

मैं एक रूबी स्क्रिप्ट लिखने की कोशिश कर रहा हूं जो PostgreSQL डेटाबेस के साथ इंटरैक्ट करता है। मैं दस्तावेज से ऐसा करने के लिए एक साथ टुकड़े करने की कोशिश कर रहा हूं, लेकिन एक अच्छा ट्यूटोरियल या नमूना कोड इस काम को पाने के लिए समय की कमी को कम करने के लिए अद्भुत काम करेगा। अगर किसी के पास कोई लिंक है, तो कुछ टिप्स या कुछ कोड है जो वे साझा कर सकते हैं, मैं सबसे ज्यादा आभारी हूं।रूबी पोस्टग्रेएसक्यूएल ट्यूटोरियल

संपादित करें, इस टिप्पणी अधिक स्पष्ट कर दिया:

नोट: इस रेल ActiveRecord, मैं एक रूबी स्क्रिप्ट है कि एक प्रोग्राम रेल से पूरी तरह से स्वतंत्र है कि में शामिल किया जाएगा लिख ​​रहा हूँ के साथ क्या करना नहीं है।

require 'pg' 

ActiveRecord::Base.establish_connection(:adapter => "postgresql" 
             :username => "username", 
             :password => "password", 
             :database => "database") 

जब आप मॉडल ActiveRecord::Base से प्राप्त करना है कि वे इस डेटाबेस कनेक्शन का उपयोग करेगा निर्धारित करें:

+0

यह रेल के साथ नहीं है – providence

+0

हम्म, मुझे लगता है कि हर कोई थोड़ी उलझन में है। मैं अपने आप पर ActiveRecord का उपयोग करने की कोशिश कर रहा हूं, रेल में नहीं। हालांकि मुझे रूबी में डेटाबेस कनेक्टिविटी के बारे में कोई जानकारी देखने में प्रसन्नता होगी, क्योंकि मुझे अक्सर लगता है कि चीजों को लागू करने का एक बेहतर तरीका है। भविष्य के पाठकों के लिए यह एक अच्छा संसाधन भी होगा। – providence

+0

आप रेल से अलग से ActiveRecord का उपयोग कर सकते हैं, या Sequel या DataMapper के रूप में एक और ORM का उपयोग कर सकते हैं। मैं सीक्वेल पसंद करता हूं; मैं एक विशेष डीबीएम के लिए एसक्यूएल को कोडिंग करने के बजाय ओआरएम का उपयोग करने की सिफारिश करता हूं। यदि, भविष्य में, आपको किसी भिन्न डेटाबेस प्रबंधक में बदलने की आवश्यकता है, तो यह एक ओआरएम के साथ छोटा है अगर यह इसका समर्थन करता है। –

उत्तर

4

आप केवल pg मणि की आवश्यकता होती है और डीबी के लिए कनेक्शन स्थापित करने की जरूरत है। बाकी सब कुछ काम करना चाहिए जैसे रेल में करता है।

+9

इस उत्तर को स्वीकार क्यों किया गया है? यह आपके प्रश्न का उत्तर नहीं देता है, आपने देखा है कि यह रेल या ActiveRecord से निपटता नहीं है। – broschb

+0

वह एक साधारण रूबी लिपि लिख रहा है, वह एक संपूर्ण गैर-संबंधित ढांचे को आयात नहीं करना चाहता:/ –

+0

सक्रिय रिकॉर्ड डेटाबेस कनेक्शन के साथ काम करने के लिए बिल्कुल ठीक है। यदि आप थोड़ा हल्का चाहते हैं तो आप सेक्वेल मणि का भी उपयोग कर सकते हैं। एआर वह था जो मुझे उस समय पता था और इसलिए मैंने यही सिफारिश की। –

20

कृपया पोस्टग्रेस्क्ल लाइब्रेरी का उपयोग करने के बारे में अधिक विशिष्ट रहें।

मैं ActiveRecord के अलावा 'पीजी' मणि मानने जा रहा हूं।

प्रोजेक्ट स्रोत में एक HTML फ़ाइल है जो सहायक हो सकती है। https://bitbucket.org/ged/ruby-pg/src/b477174160c8/doc/postgres.html पर जाएं और फिर HTML के ऊपरी दाएं किनारे पर "कच्चे" पर क्लिक करें। फ़ाइल को अपने वेब ब्राउजर में खोलें।

यह नमूना कोड में मदद करता है आप कनेक्ट (html फ़ाइल से नकल):

require "postgres" 
conn = PGconn.connect("localhost", 5432, "", "", "test1") 
# or: conn = PGconn.open('dbname=test1') 
res = conn.exec("select * from a;") 

रेस वस्तु एक PGResult है। एचटीएमएल में उस अनुभाग पर नीचे स्क्रॉल करें यह देखने के लिए कि आप किन तरीकों को कॉल कर सकते हैं।

यह लिंक आपको एक PGResult उदाहरण है: http://rubydoc.info/gems/pg/0.10.0/PGresult

अंश:

require 'pg' 
conn = PGconn.open(:dbname => 'test') 
res = conn.exec('SELECT 1 AS a, 2 AS b, NULL AS c') 
res.getvalue(0,0) # '1' 
res[0]['b']  # '2' 
res[0]['c']  # nil 
+2

बीटीडब्ल्यू, वह HTML फ़ाइल पुरानी हो सकती है। मुझे लगता है कि आपको 'पोस्टग्रेस' के बजाय 'पीजी' की आवश्यकता है। – Kelvin

14

मैं पुष्टि, "postgres" पैकेज पुरानी हो चुकी है, तो आप की जरूरत है "स्नातकोत्तर"।

रूबी और पोस्टग्रेस के साथ काम करने के लिए मुझे मूल select * from films प्राप्त करने में बहुत समय लगता है। मैं तरह कर रहा हूँ के रूप में, यहाँ मेरी कोड है:

postgres तैयारी (डेटाबेस = megatest उपयोगकर्ता = रोजर पारित = 123456 तालिका = फिल्मों)

$ su postgres 
psql 
CREATE USER roger WITH PASSWORD '123456'; 

GRANT ALL PRIVILEGES ON DATABASE megatest to roger; 

megatest=# GRANT SELECT ON films TO PUBLIC; 

पीजी पैकेज तैयार करने

sudo gem install pg 

रूबी कोड

require 'pg' 

conn=PGconn.connect(:hostaddr=>"127.0.0.1", :port=>5432, :dbname=>"megatest", :user=>"roger", :password=>'123456') 
# or for a non IP address :host => 'my.host.name.com' instead of hostaddr 

# run the query 
res = conn.exec("SELECT * FROM films") 

# Ran only once in order to get field Name 
fieldArray=res.fields() 
fieldArray.each do |elem| 
    print "elem="+elem+"\n" 
end 

# print data from the query 
res.each{ |row| 
    puts "Code="+row["code"] +" title="+row["title"] +" did="+row["did"] +" date_prod="+row["date_prod"] +" kind="+row["kind"] +" len="+row["len"] 
} 

परिणाम

[email protected]:/home/eblain/ruby# ruby postgresTest.rb 
Code=UA502 title=Bananas did=105 date_prod=1971-07-13 kind=Comedy len=01:22:00 
Code=UA503 title=Cowboy did=105 date_prod=1979-07-13 kind=Horror len=01:32:00 
Code=UA544 title=YoBro did=105 date_prod=1981-07-13 kind=Action len=01:42:00 
+1

अपने उत्तर को समझना मुश्किल है। क्या आप स्वरूपण को ठीक कर सकते हैं ताकि यह अधिक उपयोग योग्य हो? –

+0

मैक पर स्थानीय पोस्टग्रेस इंस्टिलेशन के लिए होस्टनाम क्या होगा? – HMLDude

3

पैरामीट्रिज्ड एसक्यूएल स्टेटमेंट्स के लिए, आपको PGconn#exec_params का उपयोग करना चाहिए, उदा।

conn = PGconn.new(:dbname => 'test') 
conn.exec_params(
    'INSERT INTO comedians (first_name, last_name) VALUES ($1, $2)', 
    ['Louis', 'CK']) 
conn.close 

स्रोत: http://deveiate.org/code/pg/PGconn.html

मापदंडों PGconn निर्माता को पारित किया जा सकता है कि की एक पूरी सूची के लिए Look here

संबंधित मुद्दे