2011-01-13 37 views
39

Đối với cuộc sống của tôi, tôi không thể tìm thấy một ví dụ đơn giản chỉ chạy một cái gì đó giống nhưdụ đơn giản của Postgres truy vấn trong Ruby

"SELECT * FROM MyTable"

trong Ruby. Tất cả mọi thứ tôi đang tìm kiếm giả định một ORM hoặc Rails. Bây giờ, tôi không muốn ORM; Tôi không muốn Rails. Tôi đang tìm một cái gì đó độc lập có sử dụng đá quý pg và thực hiện một truy vấn đơn giản.

+3

Cảm ơn đã đặt câu hỏi này. Tôi đã cố gắng để tìm câu trả lời bằng googling nhưng tất cả các tài liệu tôi có thể tìm thấy dường như giả định tôi đã biết làm thế nào để sử dụng ruby-pg. – Muxecoid

Trả lời

49

Từ các tài liệu pg đá quý (http://rubydoc.info/gems/pg/0.10.0/frames)

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 

câu hỏi tiếp theo của tôi sẽ là xác thực với một DB mà yêu cầu mật khẩu. Hình như bạn có thể gửi một chuỗi kết nối như thế này:
PGconn.connect("dbname=test password=mypass") hoặc sử dụng constuctor với các thông số:
PGconn.new(host, port, options, tty, dbname, login, password) hoặc sử dụng một hash như :password => '...' thấy here cho tất cả các tùy chọn có sẵn.

+3

Ví dụ đơn giản tốt, cảm ơn. Tôi có kinh nghiệm với PostgreSQL thông qua psql, python, Java và Perl nhưng chưa bao giờ sử dụng Ruby, và điều này làm cho nó tầm thường để xác minh rằng cài đặt Pg gem của tôi là tốt. Đánh giá cao. –

+0

Làm cách nào để in kết quả này trong một bảng, giống như trong công cụ gug pgadmin? – stack1

30

Hãy thử điều này:

require 'pg' 

conn = PGconn.connect("ip adddress", 5432, '', '', "db name", "user", "password") 
res = conn.exec('select tablename, tableowner from pg_tables') 

res.each do |row| 
    puts row['tablename'] + ' | ' + row['tableowner'] 
end 
+1

Dường như điều này sử dụng đá quý 'postgres' đã được superceded bởi đá quý 'pg': https://rubygems.org/gems/postgres – rogerdpack

+0

Làm cách nào để in kết quả này trong một bảng, giống như trong pgadmin gui dụng cụ ? – stack1

+0

Tôi đã chỉnh sửa câu trả lời để rõ ràng hơn một chút. Bạn đang nhận được một mảng băm trở lại, vì vậy bạn có thể xuất nó theo bất kỳ cách nào bạn muốn. Ví dụ trên sẽ in các hàng của "tablename | owner". –

0

Đối với các phiên bản mới hơn (ví dụ, 0.18.3 lên đến phiên bản hiện tại mới nhất 0.21.0) của đá quý pg, thay vì sử dụng:

conn = PGconn.connect(*args) 

(các hằng số PGconn, PGresult, và PGError được nữa và sẽ được loại bỏ như các phiên bản 1.0)

Bạn nên sử dụng conn = PG.connect(*args), ví dụ:.

require 'pg' 

conn = PG.connect("IP-Address", 5432, '', '', "database-name", "username", "password") 
res = conn.exec('select product_id, description, price from product') 

res.each do |row| 
    puts row 
end 

link tham khảo: gem pg

Các vấn đề liên quan